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...