如何避免僵尸进程(转)
- 父进程中调用wait()等待回收子进程
- 两次fork()来避免僵尸进程
- 在父进程fork()之前安装SIGCHLD信号处理函数,并在此handler函数中调用waitpid()等待子进程结束
- 在父进程中加入一条语句:signal(SIGCHLD,SIG_IGN);表示父进程忽略SIGCHLD信号
- 杀死父进程,这样子进程就由init进程接管
wait是父进程回收子进程PCB资源的一个系统调用。进程一旦调用了wait函数,就立即阻塞自己
本身,然后由wait函数自动分析当前进程的某个子进程是否已经退出,当找到一个已经变成僵尸的
子进程,wait就会收集这个子进程的信息,并把它彻底销毁后返回;如果没有找到这样一个子进
程,wait就会一直阻塞,直到有一个出现为止。
参考: https://blog.csdn.net/libaineu2004/article/details/85937906