守护进程, 协同进程, 僵尸进程, 孤儿进程概念理解

守护进程

没有控制终端, 运行在后台的特殊进程, 用于执行特定的系统任务, 这样的进程称为守护进程.
守护进程长期生存, 常在系统引导时装入启动. 一般的网络服务, 都是以守护进程形式存在提供服务.
用户层守护进程的父进程是init进程(pid = 1).
守护进程查看方式:
基于BSD的系统, 执行shell命令

$ ps -axj

基于System V的系统, 执行命令 (只能查看当前用户的进程)

$ ps -efj

守护进程名称通常以d结尾.

协同进程

协同进程的概念

APUE 15.4的描述是

UNIX系统过滤程序从标准输入读取数据, 向标准输出写数据. 几个过滤程序通常在shell管道中连接. 当一个过滤程序既产生某个过滤的输入, 又读取该过滤程序的输出时, 它就变成了协同进程(coprocess).

这里注意到是"它就变成了协同进程", 也就是说协同进程是一个, 而非两个, 而且是从标准输入、标准输出的那个. 协同进程就好像帮助另一个进程接收标准输入并过滤, 处理输出数据并输出到标准输出设备一样.

然而, 协同进程仅仅指是过滤标准输入、输出的过滤器进程吗?

过滤程序

什么是过滤程序?

过滤程序是流(stream)处理程序,它们从标准输入读取流数据,对其进行适当处理后写到标准输出。标准输入默认来自键盘,不过可以重定向到一个文件或者来自其它程序的输出。标准输出默认是显示器,当然也可以重定向到一个文件,也可以是其它设备(例如打印机),或者重定向到管道作为其他程序的输入等。通常情况下,几个过滤程序在SHELL管道命令行(|)中线性地连接。
最常用的过滤程序有grep,cat,awk,head,sed,less,more等。

参考APUE协同进程的讨论 | CSDN

例子

下图是一个简单的协同进程的例子, 进程创建2个管道: 协同进程的标准输入, 协同进程的标准输出
守护进程, 协同进程, 僵尸进程, 孤儿进程概念理解

僵尸进程

当一个子进程终止时(正常终止或异常终止), 停止活动, 但占用的存储资源尚未释放, 此时子进程称为僵尸进程.
父进程通过调用wait/waitpid阻塞等待子进程终止, 回收子进程其资源, 子进程才会完全消亡.

僵尸进程可以通过ps命令查看到, 但无法用kill命令杀死, 因为此时僵尸进程已经"死了".
top命令查看CPU实时进程情况

$ top

ps命令查看僵尸进程的相关信息

$ ps -e -o stat,ppid,pid,cmd|egrep '^[Zz]'

结束僵尸进程的方法: 使用kill命令终结父进程. 父进程终结时, 子进程会被init进程收养, 如果是僵尸进程会立即回收资源.

参考 top发现僵尸进程

孤儿进程

对于一个正常运行的子进程, 当其父进程终止时, 子进程就变成孤儿进程. 孤儿进程会被init进程收养, 运行终止时, init进程会立即回收其资源.

原文链接: https://www.cnblogs.com/fortunely/p/14792170.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    守护进程, 协同进程, 僵尸进程, 孤儿进程概念理解

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/403024

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年4月21日 上午11:20
下一篇 2023年4月21日 上午11:20

相关推荐