进程状态补充

举报
跳动的bit 发表于 2022/08/30 07:45:35 2022/08/30
【摘要】 💦、补充说明 1、 S and S+  一般在命令行上,如果是一个前台进程,那么它运行时状态后会跟 +。也就是说前台进程一旦执行,bash 就无法进行命令行解释,ls、top 等命令都无法执行,只有 Ctrl + C 来进行终止:如果想把一个进程放在后台可以 ./mytest & :其中对于后台进程,bash 可以对命令行解释:但是你会发现 Ctrl + C 无法终止后台进程,只能对该进...

💦、补充说明

1、 S and S+

  一般在命令行上,如果是一个前台进程,那么它运行时状态后会跟 +。

在这里插入图片描述

也就是说前台进程一旦执行,bash 就无法进行命令行解释,ls、top 等命令都无法执行,只有 Ctrl + C 来进行终止:

在这里插入图片描述

如果想把一个进程放在后台可以 ./mytest &

在这里插入图片描述

其中对于后台进程,bash 可以对命令行解释:

在这里插入图片描述

但是你会发现 Ctrl + C 无法终止后台进程,只能对该进程发送第 9 号信号来结束进程:

在这里插入图片描述

2、 OS 描述的状态 and 具体的 Linux 进程状态

在这里插入图片描述
在这里插入图片描述

其中新建没有对应的 Linux 进程状态;就绪可对应到 Linux 进程中的 R;运行也可对应到 Linux 进程中的中的 R;退出可对应到 Linux 进程中的 Z/X;阻塞可对应到 Linux 进程中的 S/D/T;

所以 Linux 状态的实现和操作系统的实现是有点差别的。操作系统的所描述的概念是所有操作系统都遵守这样的规则,而 Linux 就是一种具体的操作系统规则。

3、僵尸进程的危害
  1. 进程的退出状态必须被维持下去,因为它要告诉关心它的进程(父进程),你交给我的任务,我办的怎么样了。可父进程如果一直不读取,那子进程就一直处于 Z 状态。
  2. 维护退出状态本身就是要用数据维护,也属于进程基本信息,所以保存在 task_struct(PCB) 中,换句话说,Z 状态一直不退出,PCB 一直都要维护。
  3. 那一个父进程创建了很多子进程,就是不回收,就会造成内存资源的浪费,因为数据结构对象本身就要占用内存,想想 C 中定义一个结构体变量(对象),就是要在内存的某个位置进行开辟空间。
  4. 内存泄漏。
  5. 如何避免,后面再谈。
4、孤儿进程

父进程如果提前退出,那么子进程就是 孤儿进程,那么子进程退出,进入 Z 之后,该怎么处理 ❓
在这里插入图片描述

可以看到 5 秒前有 2 个进程,5 秒后父进程死亡了(这里没有被僵尸的原因是父进程也有父进程 23178 -> bash),只有 1 个子进程。这里我们称没有父进程的子进程为孤儿进程,此时孤儿进程会被 1号进程领养,它是 systemd(操作系统),此时操作系统就可以直接对我回收资源。 且进程状态会由前台转换为后台,后台进程可以使用 第 9 号信号来结束进程。

在这里插入图片描述

5、1 号进程

在这里插入图片描述

操作系统启动之前是有 0号进程的,只不过完全启动成功后,0号进程就被1号进程取代了,具体的取代方案,后面学习 进程替换时再谈。可以看到 pid 排名靠前的进程都是由 root 来启动的。注意在 Centos7.6 下,它的 1号进程 叫做systemd,而 Centos6.5 下,它的 1号进程 叫做initd

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。