关于linux:僵尸进程和孤儿进程

31次阅读

共计 757 个字符,预计需要花费 2 分钟才能阅读完成。

https://www.cnblogs.com/Anker…

孤儿过程:

一个父过程退出,而它的一个或多个子过程还在运行,那么那些子过程将成为孤儿过程。孤儿过程将被 init 过程 (过程号为 1) 所收养,并由 init 过程对它们实现状态收集工作。孤儿过程是没有父过程的过程,孤儿过程这个重任就落到了 init 过程身上,init 过程就如同是一个民政局,专门负责解决孤儿过程的善后工 作。每当呈现一个孤儿过程的时候,内核就把孤 儿过程的父过程设置为 init,而 init 过程会循环地 wait()它的曾经退出的子过程。这样,当一 个孤儿过程苍凉地完结了其生命周期的时候,init 过程就会代表党和政府露面解决它的所有善后工作。因而孤儿过程并不会有什么危害。

僵尸过程:

一个过程应用 fork 创立子过程,如果子过程退出,而父过程并没有调用 wait 或 waitpid 获取子过程的状态信息,那么子过程的过程描述符依然 保留在零碎中。这种过程称之为僵死过程。
解决僵尸过程
查找状态为 Z 的过程,Z 就是代表 zombie process, 僵尸过程的意思。
kill -9 能够杀死僵尸过程,因而 kill – 9 示意强制杀死该过程; 与 SIGTERM 相比,这个信号不能被捕捉或疏忽,同时接管这个信号的过程在收到这个 信号时不能执行任何清理。

僵尸过程的解决办法

(1)通过信号机制
子过程退出时向父过程发送 SIGCHILD 信号,父过程解决 SIGCHILD 信号。在信号处理函数中调用 wait 进行解决僵尸过程
https://blog.csdn.net/chenkai…
(2)fork 两次
《Unix 环境高级编程》8.6 节说的十分具体。原理是将子过程成为孤儿过程,从而其的父过程变为 init 过程,通过 init 过程能够解决僵尸过程
https://www.cnblogs.com/funbl…

正文完
 0