僵尸进程和孤儿进程

来源:互联网 发布:linux系统管理员薪水 编辑:程序博客网 时间:2024/05/29 17:53

一、概念的引入
在Linux环境中,子进程是父进程通过fork函数创建的,子进程和父进程相互独立,子进程和父进程的运行是异步的,当一个进程因为某种原因终止时,它的父进程需要调用wait()或者waitpid()系统调用取得子进程的终止状态。
1、僵尸进程
一个终止了但是没有被父进程回收的进程成为僵尸进程。
2、孤儿进程
如果一个进程正在运行但是它的父进程终止了,此时该进程就是孤儿进程,系统会安排init进程来回收孤儿进程,init进程的PID为1,是在系统启动之后由内核创建的,它永远不会终止。
二、僵尸进程和孤儿进程带来的危害
1、僵尸进程
虽然子进程已经退出了,但是在系统进程中还为它保留了一些退出状态的信息,如果父进程一直不读取这些退出状态的话,这些进程表项将一直被占用,系统进程表是一项有限资源,如果系统进程表被僵尸进程耗尽的话,系统可能无法创建新的进程。
2、孤儿进程
由于每次init进程都会回收孤儿进程,因此孤儿进程并不会造成什么危害。
三、验证僵尸进程和孤儿进程
1、验证僵尸进程
代码如下:
这里写图片描述
该程序的运行结果如下图:
这里写图片描述
如上图所示,由于子进程已经退出但是没有被父进程回收,因此成为了僵尸进程。
2、验证孤儿进程
代码如下:
这里写图片描述
该程序大的运行结果如下图:
这里写图片描述
由图可知,子进程为孤儿进程,并且他被1号进程回收。

0 0