一起探索进程
进程的概念
进程=PCB+代码和数据
一个已经加载到内存中的程序(正在执行的程序)叫做进程
如果只是把代码和数据加载到内存中,这不是进程
内核观点:担当分配系统资源(CPU时间,内存)的实体
描述进程-PCB
可执行程序加载到内存中,形成进程时,操作系统要先创建描述进程的结构体对象。进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。课本上称之为PCB(process control block), Linux操作系统下的PCB是: task_struct
注意:在所有的操作系统的进程控制模块都叫PCB,但是在不同平台下PCB有所差异。
为什么操作系统要有PCB?
操作系统要对进程进行管理,需要先描述再组织。
如果要使程序运行起来,就必须让执行程序加载到内存中,本质上是把代码和数据加载到内存中。为了让操作系统更好的管理进程,需要为该进程创建一个PCB对象来描述进程。

虽然进程是由代码+数据、PCB构成,但是操作系统只关心PCB,不关心代码和数据,需要的是描述代码和数据的结构体PCB
Linux系统进程
task_struct
- 在Linux中描述进程的结构体叫做task_struct。
task_struct是Linux内核的一种数据结构,它会被装载到RAM(内存)里并且包含着进程的信息
task_struct内容
- 标示符: 描述本进程的唯一标示符,用来区别其他进程。
- 状态: 任务状态,退出代码,退出信号等。
- 优先级: 相对于其他进程的优先级。
- 程序计数器: 程序中即将被执行的下一条指令的地址。
- 内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
- 上下文数据: 进程执行时处理器的寄存器中的数据。
- I/ O状态信息: 包括显示的I/O请求,分配给进程的I/ O设备和被进程使用的文件列表。
- 记账信息: 可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。
- 其他信息
组织进程
可以在内核源代码里找到它。所有运行在系统里的进程都以task_struct链表的形式存在内核里。
查看进程属性
ps -axj | head -1 &&ps ajx | grep myproces.exe
&&用来连接两个指令的操作
左边只打印“表头”信息
右边是将myprocess.exe相关信息过滤出来

这里最后一行显示的是grep的进程。
进程的信息可以通过 /proc 系统文件夹查看
命令:ls /proc

proc是Linux系统下的一个目录,关机后,目录里面的信息全都没了,开机的时候操作系统会自动创建对应的目录文件。上图所示,蓝色的数字表示一个,目录,数字是进程的唯一PID。这个目录里面保存了进程的所有属性。
如果要获取PID为1的进程信息,你需要查看 /proc/1 这个文件夹。
大多数进程信息同样可以使用top和ps这些用户级工具来获取


浙公网安备 33010602011771号