子进程是父进程调用fork后生成的,如果子进程
什么是僵死进程?
一个子进程在父进程还没有调用wait或waitpid前退出,父进程无法对该子进程进行善后处理(获取终止子进程的有关信息,释放它仍占用的资源),该子进程则为僵死进程.
什么是孤儿进程?
如果父进程先于子进程结束,内核会将这些子进程的父进程设为init进程,而这些子进程称为孤儿进程,需要注意的是,因为init被编写为无论何时只要有一个子进程终止,init就会调用一个wait函数取得其终止状态,因此孤儿进程或者说init的所有子进程都不会变为僵死进程.
如何防止进程变成僵死进程?
1.内核在进程退出时,会发送SIGCHLD信号给父进程,因此,可以在SIGCHLD信号的处理函数是增回wait调用以确保终止进程的资源得到合理回收,从而避免变成僵死进程
2.使用特别的编写方式(两次fork),使得子进程的父进程为init进程,由init进程确保该进程不会变成僵死进程
阅读(819) | 评论(0) | 转发(0) |