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