【Linux】进程周边:进程概念


🌷相关专栏:《c++学习》《Linux进阶之路》🌷


全片内容总览:

目录

1.进程基本概念

2.进程的本质?为什么要有进程控制块PCB?

1)为什么要有进程控制块PCB?

2)进程的本质

3) Linux系统下的PCB:task_struct

概念

task_struct的内容

3.怎么使用进程

1)查看进程

🔥利用系统目录查看

🔥利用“用户级”工具获取进程信息

⁉️grep引发的问题

⁉️进程是有生命周期的

 2)杀掉进程

ctrl+c终止进程

kill + 进程PID

💗感谢阅读!💗


1.进程基本概念

较为官方的说法:

  • 课本概念: 程序的一个执行实例,正在执行的程序等。
  • 内核观点: 担当分配系统资源(CPU时间,内存)的实体。

辅助理解:
对代码进行编译链接产生的文件我们称之为可执行程序(.exe),执行该程序,该程序会被加载到内存中,此时便称之为进程

2.进程的本质?为什么要有进程控制块PCB

1)为什么要有进程控制块PCB

因为操作系统要利用进程控制块PCB,对进入内存的可执行程序进行管理。
 

对于我们常用的电脑来说,可以同时执行多个可执行程序。

他们都要进入内存,因此属于软硬件资源的一种,归属操作系统进行管理

操作系统进行管理的原则就是:先描述,再组织。
 

因此,我们将进程的相关信息描述起来,描述得到的就是进程控制块PCB(process control block)。

每个进程都有着与之对应的进程控制块PCB,各不相同。

那么进程的本质:进程=PCB(内核数据结构)+可执行程序 


 

那么对于进程的管理,就可以转换为对进程控制块PCB的管理。

我们将进程控制块PCB,组织起来,构成特定的数据结构。

操作系统的管理进程对象的转换:

        对进程的直接管理 --->  对PCB对象的管理 ---> 对PCB有关的某种数据结构的管理

2)进程的本质

进程 = 内核PCB对象 +可执行程序
         =内核数据结构 +可执行程序

 

  • 所有对进程的控制和操作,都只和进程的PCB有关,和进程的可执行程序没有关系。
  • 一旦有需求,可以把PCB(Node节点)放到任意数据结构中去。

举例:

cpu如果想要执行a.exe、b.exe,只需要调用他们对应的PCB(pcb_a,pcb_b)。

即将被cpu执行的PCB会构成对应的数据结构,等待被cpu执行。

总结:

CPU在进行进程调度的时候, 本质进程排队,其实就是让进程的PCB去排队,而不是可执行程序去排队,CPU找到了对应CPB,就找到了可执行程序,包括它的属性信息。

3) Linux系统下的PCB:task_struct

概念

课本上是:进程控制块PCB(process control block),PCB是操作系统学科的总称。
 

Linux操作系统下的PCB具体名称是: task_struct
task_struct是Linux内核的一种数据结构,它会被装载到RAM(内存)里并且包含着进程的信息。

task_struct的内容

  • 标示符(PID): 描述本进程的唯一标示符,用来区别其他进程(每次启动都会变化)。
  • 状态: 任务状态,退出代码,退出信号等。
  • 优先级: 相对于其他进程的优先级。
  • 程序计数器(pc): 程序中即将被执行的下一条指令的地址。
  • 内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针。
  • 上下文数据: 进程执行时处理器的寄存器中的数据。
  • I/O状态信息: 包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。
  • 记账信息: 可能包括处理器时间总和,使用的时钟总和,时间限制,记账号等。
  • 其他信息。

3.怎么使用进程

1)查看进程

🔥利用系统目录查看

根目录下的proc目录,/proc 下存储着进程信息。

 查看所有进行目录文件:

ls /proc

目录名是数字的,就是每个进程对应得目录,存储着所有进程信息。

数字是进程得标识符PID,每个进程得PID是唯一的。

让我们尝试查看一个进程的信息,

ls 84350

🔥利用“用户级”工具获取进程信息

以下两个指令都可以。

ps ajx //查看所有系统进程的基本信息
ps aux //查看所有系统进程的基本信息

可以结合head、grep 来查找具体的某个进程。


head  显示进程的属性行,方便确定进程的PID,以及父进程的PID。

ps ajx | head -1

greap 查找具体某个进程

ps ajx | head -1 && ps ajx | grep a.out

⁉️grep引发的问题

在前文,我们利用  ps ajx | head -1 && ps ajx | grep a.out ,查找到了a.out 这个进程,

但是还出现一个特殊的grep进程??

这是因为,我们利用grep 查找a.out的时候,grep指令因此也在执行,grep也属于进程,并且包含了a.out的信息。

可以看出,所有独立的指令,背后都是写好的程序,一旦运行起来,它们也是进程。

想要去除grep这个进程的办法:

使用 -v选项,反向搜索的意思,即过滤掉包含有grep内容的信息。  

ps ajx | head -1 && ps ajx | grep test | grep -v grep

⁉️进程是有生命周期的
 

进程的创建和销毁

我们可以看到,一开始并没有PID为84647的进程,直到程序被执行,才查询到对应的进程信息。

一旦结束可执行程序,对应PID为84647的进程也被销毁。

while :; do ps ajx | head -1 && ps ajx | grep  a.out | grep -v grep; sleep 1;done

随着进程的销毁,它对应的PID也会消失。
 

因为进程是有生命的。

所以每次启动同一个可执行程序,但是产生的进程的PID也会变化。

每次都是一个新进程!

如下图:

 2)杀掉进程

ctrl+c终止进程

使用的效果,如下图:

kill + 进程PID


💗感谢阅读!💗


  • 12
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值