在用wait和waitpid函数处理僵尸进程时,父进程可以阻塞等待子进程结束,也可以非阻塞的查询是否有子进程结束等待处理。但是,第一种方式父进程阻塞了就不能处理自己的工作了,而第二种父进程在处理自己的工作时还需要时不时的轮询一下,使得程序变得复杂。而在子进程终止时,会给父进程发送SIGCHLD信号,该信号的默认处理是忽略,父进程可以自定义该函数,使得父进程可以专心处理自己的工作不必关心子进程,而在子进程终止时会通知父进程,父进程在信号处理函数中调用wait清理子进程即可。
1 | #include<stdio.h> |