守护进程, 协同进程, 僵尸进程, 孤儿进程概念理解
2021/5/21 7:25:04
本文主要是介绍守护进程, 协同进程, 僵尸进程, 孤儿进程概念理解,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
守护进程
没有控制终端, 运行在后台的特殊进程, 用于执行特定的系统任务, 这样的进程称为守护进程.
守护进程长期生存, 常在系统引导时装入启动. 一般的网络服务, 都是以守护进程形式存在提供服务.
用户层守护进程的父进程是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进程会立即回收其资源.
这篇关于守护进程, 协同进程, 僵尸进程, 孤儿进程概念理解的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-07-04TiDB 资源管控的对撞测试以及最佳实践架构
- 2024-07-03万字长文聊聊Web3的组成架构
- 2024-07-02springboot项目无法注册到nacos-icode9专业技术文章分享
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现