Linux:进程概念

news2025/4/3 1:17:56

目录

1 冯诺依曼体系

 2 操作系统(Operator System)

3 如何理解管理

3.1计算机管理硬件

3.2 管理逻辑图

3.3 怎样管理 

 4 什么是进程?

5 查看进程 

5.1  ps ajx显示所有进程信息

5.2 /proc(内存文件系统)

5.2.1 ls /proc/PID

5.2.2 ls /proc/PID -al

​ 5.3 PPID与PID 

6 getpid(),getppid()

 7 父进程与子进程

7.1子进程的创建 (fork)

总结 


1 冯诺依曼体系

我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系

我们所认识的计算机,都是有一个个的硬件组件组成:

  • 输入单元:包括键盘, 鼠标,扫描仪, 写板等
  • 中央处理器(CPU):含有运算器和控制器等
  • 输出单元:显示器,打印机等我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。

关于冯诺依曼:

这里的存储器指的是内存 不考虑缓存情况,这里的CPU能且只能对内存进行读写不能访问外设(输入或输出设备) 外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取。 一句话,所有设备都只能直接和内存打交道

 2 操作系统(Operator System)

操作系统:对下与硬件交互,管理所有的软硬件资源。对上为用户程序(应用程序)提供一个良好的执行环境。一句话就是操作系统是管理软硬件的软件。

3 如何理解管理

3.1计算机管理硬件

  •  描述起来,用struct结构体
  •  组织起来,用链表或其他高效的数据结构

总结就是六个字:先描述,再组织

3.2 管理逻辑图

3.3 怎样管理 

操作系统是怎么管理进行进程管理的呢?很简单,先把进程描述起来,再把进程组织起来!

 4 什么是进程?

当你写完一个程序的时候,在没运行的时候,代码存在于哪里呢?存在于磁盘中,当程序运行的时候,程序就会被加载到内存之中,此时该程序还不是进程。在一个操作系统中,除了运行你的程序之外,还运行着其他的程序,那么系统中这些程序都是杂乱无章的吗?当CPU处理这些任务的时候考不考虑优先级呢?

运行中程序的管理:先描述再组织

描述过程:操作系统为每一个运行的程序用一个 struct task_struct 结构体来描述运行的程序的属性和信息。

组织过程:可以认为把创建的strcut 用双向链表进行链接。

操作系统中为每一个运行的程序维护一个数据结构,数据结构中应该存放该进程的所有相关的属性和信息。

所以说,进程=磁盘中的代码+内核的数据结构

在Linux操作系统下,我们称它为PCB,Process Control Block,即进程控制模块。

5 查看进程 

系统调用

想象一下,如果操作系统完全暴露在用户面前,对于新手用户可能会误触到操作系统内核的数据或者指令,导致出现不可挽回的后果。于是,操作系统为了安全考虑,不会将自己的底层直接交给用户操作,而是将操作系统封装起来,并提供一些特定的接口以供用户使用,这样的由操作系统给用户提供的操作接口,就被称为系统调用。

进程查看

上面我们已经了解到了进程,那么对于系统中的进程我们该怎么查看呢?下面介绍几种查看进程的系统调用指令。

5.1  ps ajx显示所有进程信息

 但是,上述命令不利于我们查找自己的进程信息,如下我们编写一个程序名为process,运行之后想要在系统中查看它的进程信息,我们可以使用:

 ps ajx | head -1&&ps ajx  | grep process来查看它。(head表示显示头栏)

创建的process程序,内容随意。 

接下来我们通过   ps ajx | head -1&&ps ajx  | grep process 命令查看进程信息

查看进程的时候发现出现了两个进程,其中一条是执行grep命令的进程。要想过滤掉它,我们可以用ps ajx | head -1 && ps ajx | grep Process | grep -v grep。

5.2 /proc(内存文件系统)

进程的信息还可以通过 /proc 系统文件夹查看,如果我们要想查看PID(Process I D)为 2的进程,可以进行如下操作。

5.2.1 ls /proc/PID

那么这个数字2 是什么呢,在上述我们使用 ps ajx 命令时,会发现头栏有PID(Process I D) 。即为标识一个进程的重要信息,类似于身份证号的概念,对于系统中的每一个进程,系统都会分配给其一个唯一的PID,/proc就是以这个来查看进程信息的。

 例如如下进程的PID 为2121

接下来我们使用/proc/PID 命令进行查看

5.2.2 ls /proc/PID -al

该指令用来查看进程的更多信息,圈出来的红框里的两个信息

cwd:表示当前进程运行的路径

exe:表示可执行文件的路径

 5.3 PPID与PID 

PID即Process ID,上面讲到了PID是一个进程的标识符,担当着“身份证号”的角色,每一个系统中的进程都有唯一的PID。那么PPID是什么呢?即Parent Process ID,为当前进程的父进程ID。

 为什么要有父进程的这个概念:当我们在执行shell脚本的时候,这个动作是由登录的shell(父进程)处理的,有的也叫bash(shell 或者bash 就是命令解释器), 为了执行指令,父进程bash会创建一个新的子进程用来代替父进程执行命令,子进程是父进程的一个副本,它独立运行,这种方式保证了脚本执行的安全性和隔离性,避免了对父进程状态的影响。后面我们会看到bash.


6 getpid(),getppid()

除了上述的查看一个进程的PID与PPID的方法,系统还提供了一个调用接口

通过系统调用获取进程标示符

 getppid()是获取父进程的PID

当我们结束这个程序再次运行的时候,我们发现,每次重新形成一个进程时,系统都会为它分配一个ID,所以第一次的ID是22783,第二次的变成了23883,但是后面的父进程14105为什么不变呢?

 7 父进程与子进程

通过上图我们可以看到父进程的PID 14105是不变的,那么后面的~bash是什么呢,前面也有所说,bash是命令解释器, 为了执行指令,父进程bash会创建一个新的子进程用来代替父进程执行命令,子进程是父进程的一个副本,它独立运行,这种方式保证了脚本执行的安全性和隔离性,避免了对父进程状态的影响

7.1子进程的创建 (fork)

在上面我们已经了解到了进程的形成过程,以及怎么查看进程相关的信息和属性,,且我们知道了父进程和子进程,那么我们该如何自己创建一个子进程呢?操作系统已经为用户提供了一个系统调用接口来创建子进程:fork()

认识fork

 ✍fork()返回值

fork()创建一个子进程的时候会把该进程的PID传给父进程,而把0传给该子进程,若创建子进程失败会把-1传给父进程,接下来我们用一个例子来进行说明。 

 运行结果:

我是父进程:pid:3058,ppid :14105,id 3059

我是子进程:pid :3059,ppid :3058,id 0

解释一下:前面也说过fork()是一个创建子进程的函数,当我们创建一个子进程的时候。

我是子进程:pid :3059,ppid :3058,id 0,子进程的pid会传给父进程:我是父进程:pid:3058,ppid :14105,id 3059。所以父进程的id 为3059,且子进程的ppid为3058,而父进程pid为3058,说明其为父子进程关系。而ppid 14105的这个进程不是别的,是bash.


总结 


  • fork()之后,会有父进程+子进程两个进程在执行后续代码。
  • fork()后续的代码,被父子进程共享。
  • 通过返回值不同,让父子进程执行后续共享代码的一部分。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2308487.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Rabbit MQ 高频面试题【刷题系列】

文章目录 一、公司生产环境用的什么消息中间件?二、Kafka、ActiveMQ、RabbitMQ、RocketMQ有什么优缺点?三、解耦、异步、削峰是什么?四、消息队列有什么缺点?五、RabbitMQ一般用在什么场景?六、简单说RabbitMQ有哪些角…

【NLP 28、一文速通NLP文本分类任务 —— 深度学习】

目录 一、深度学习 — pipeline 流水线 1.配置文件 config.py Ⅰ、路径相关 Ⅱ、模型相关 Ⅲ、训练相关 2.数据加载 loader.py Ⅰ、类初始化 Ⅱ、加载数据并预处理 Ⅲ、文本编码 Ⅳ、对输入序列截断或填充 Ⅴ、返回数据长度 Ⅵ、返回对应索引位置元素 Ⅶ、加载词表 Ⅷ、封装数据…

UnrealEngine UE5 可视化 从地球观察火星 金星 土星 运动轨迹

视频参考:https://www.bilibili.com/video/BV1KpXSYdEdo/ 从地球观察土星的运动轨迹 从地球观察火星 轨迹 从地球观察金星的运动轨迹

Rocky Linux 8.5 6G内存 静默模式(没图形界面)安装Oracle 19C

Oracle19c 下载地址 Database Software Downloads | Oraclehttps://www.oracle.com/database/technologies/oracle-database-software-downloads.html#db_ee 目录 一、准备服务器 1、服务器可以克隆、自己装 2、修改主机名 3、重启 4、关闭selinux 5、关闭防火墙 5.1、…

免费轻巧多功能 PDF 处理工具:转换、压缩、提取一应俱全

软件技术 今天要给大家分享一款超实用的 PDF 处理工具,它免费又轻巧,如同随时待命的得力小帮手,功能之强大超乎想象,真的值得大家收藏。 这款工具是绿色版软件,解压后开启,满满的 PDF 处理功能便映入眼帘…

基于ssm的校园跑腿管理系统+vue

作者主页:舒克日记 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 系统共有管理员、用户两个角色 管理员主要的功能用户信息管理、任务信息管理、任务类型管理、接单信息管理、公告信息管理、投诉信息管理、公告类型管…

java数据结构_Map和Set_9.1

1. 搜索树 1.1 概念 二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树: 若它的左子树不为空,则左子树上所有的结点都小于根结点的值若它的右子树不为空,则右子树上所有的结点都大于根结点的值…

横向移动靶场-Tr0ll: 3

Tr0ll: 3来自 <Tr0ll: 3 ~ VulnHub> 1&#xff0c;将两台虚拟机网络连接都改为NAT模式 2&#xff0c;攻击机上做namp局域网扫描发现靶机 nmap -sn 192.168.23.0/24 那么攻击机IP为192.168.23.182&#xff0c;靶场IP192.168.23.187 3&#xff0c;对靶机进行端口服务探测 …

记20忘10之六:line

记20忘10之六&#xff1a;line 胖子定律&#xff1a;每天坚持多咬两口&#xff0c;相信将来自己就是个胖子 今天&#xff0c;我们继续来记几个单词吧&#xff0c; line n.线 moral bottom line道德底线 派生、同源或相关&#xff1a; linear a.线的&#xff0c;直线的lineamen…

【愚公系列】《Python网络爬虫从入门到精通》036-DataFrame日期数据处理

标题详情作者简介愚公搬代码头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。近期荣誉2022年度…

使用ChatGPT-Deep Reaserch两步给出文献综述!

文献综述是学术论文写作中不可或缺的一部分&#xff0c;它不仅是对已有研究的梳理和总结&#xff0c;更是为后续研究奠定理论基础的关键步骤。通过文献综述研究者能够全面了解当前研究领域的现状、主要观点和研究方法&#xff0c;从而找到自己研究的切入点和创新点。这一过程需…

从0开始的操作系统手搓教程14——进一步完成中断子系统

目录 所以&#xff0c;如何查看我们的IDT呢 改进我们的中断处理hook 对8253编程&#xff0c;提升系统的频率 导论 控制字说明 说一下每个方式——概论 说一说计数器如何进行计时 方式0 方式1 方式2 方式3 方式4 方式5 回到问题&#xff0c;我们如何设置单次触发冲…

Educational Codeforces Round 174 (Rated for Div. 2)

Problem - B - Codeforces 之前没思路&#xff0c;我看了看答案。 思路不就来了&#xff1a; 简而言之&#xff0c;BFS那样遍历周围&#xff08;上下左右均一次&#xff09;&#xff0c;如果有同色&#xff0c;就把这部分相邻的隔开&#xff0c;可以得到两块陌生人集合&#x…

微服务即时通信系统---(七)文件管理子服务

目录 功能设计 模块划分 业务接口/功能示意图 服务实现流程 服务代码实现 封装文件操作模块(utils.hpp) 获取唯一标识ID 文件读操作 文件写操作 编写proto文件 文件元信息 文件管理proto 单文件上传 多文件上传 单文件下载 多文件下载 RPC调用 服务端创建子…

mosfet的驱动设计-开关损耗

目录 1.开关时的DS损耗 2.导通损耗 3.截止损耗 4&#xff0e;驱动损耗 mos管的损耗主要有开关损耗和导通损耗两部分&#xff0c;开关损耗包括mos管开通是消耗的能量和在mos在线性区产生的损耗。导通损耗是由mos的导通电阻电阻消耗的能量。 mos的实际模型 我们先来感性的…

萌新学 Python 之 with 文件操作语句

with 语句用于资源管理&#xff0c;避免资源泄露&#xff0c;对文件操作时&#xff0c;不管文件是否有异常&#xff0c;都会自动清理和关闭 with 语句的格式&#xff1a; with open(文件路径, mode模式, encodingutf-8) as file_obj: # as 取别名print(对文件进行操作&…

C# Unity 唐老狮 No.2 模拟面试题

本文章不作任何商业用途 仅作学习与交流 安利唐老狮与其他老师合作的网站,内有大量免费资源和优质付费资源,我入门就是看唐老师的课程 打好坚实的基础非常非常重要: Unity课程 - 游习堂 - 唐老狮创立的游戏开发在线学习平台 - Powered By EduSoho 如果你发现了文章内特殊的字体…

FFmpeg-chapter3-读取视频流(原理篇)

ffmpeg网站&#xff1a;About FFmpeg 1 库介绍 &#xff08;1&#xff09;libavutil是一个包含简化编程函数的库&#xff0c;包括随机数生成器、数据结构、数学例程、核心多媒体实用程序等等。 &#xff08;2&#xff09;libavcodec是一个包含音频/视频编解码器的解码器和编…

单片机中的flah和RAM

片机的 Flash 和 RAM 是两种关键的内存类型&#xff0c;分别用于存储程序代码和运行时数据。 Flash 存储器 用途&#xff1a;用于存储程序代码&#xff08;如固件&#xff09;和常量数据&#xff08;如查找表、字符串等&#xff09;。 特点&#xff1a; 非易失性&#xff1a;断…

【Pytest】setup和teardown的四个级别

文章目录 1.setup和teardown简介2.模块级别的 setup 和 teardown3.函数级别的 setup 和 teardown4.方法级别的 setup 和 teardown5.类级别的 setup 和 teardown 1.setup和teardown简介 在 pytest 中&#xff0c;setup 和 teardown 用于在测试用例执行前后执行一些准备和清理操…