重读APUE(12)-SIGCHLD与僵尸进程

Posted wanpengcoder

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了重读APUE(12)-SIGCHLD与僵尸进程相关的知识,希望对你有一定的参考价值。

SIGCHLD信号是当子进程终止时向父进程发送的信号;它的语义如下:

如果进程明确的将该信号设置为SIG_IGN,则调用进程不会产生僵尸进程;这种情况下,wait是等不到给子进程收尸的,所以wait阻塞到所有子进程终止后,返回-1,并且将errno设置为ECHILD;

如果进程没有明确的设置捕获该信号,那么将会是默认处理SIG_DFL(忽略),这种情况下,如果不使用wait函数,会产生僵尸进程;

如果进程明确的设置捕获该信号,则内核立即检查是否子进程准备好被等待,如果是,则调用SIGCHLD处理程序,当然也需要使用wait函数,否则会产生僵尸进程;

补充:使用sigaction可以设置SA_NOCLDWAIT标志,也可以避免产生僵尸进程;

 

可见,除了调用wait函数族来避免僵尸进程之外,还可以通过显示的设置SIGCHLD信号为忽略,或者通过sigaction设置SA_NOCLDWAIT标志来避免产生僵尸进程;

 

以上是关于重读APUE(12)-SIGCHLD与僵尸进程的主要内容,如果未能解决你的问题,请参考以下文章

14僵尸进程方式3 4补充

僵死进程的清除

linux第7天

孤儿进程与僵尸进程

(转载)linux下的僵尸进程处理SIGCHLD信号Linux环境进程间通信: 共享内存(下)

孤儿进程与僵尸进程