当前位置: 技术问答>linux和unix
在LINUX/UNIX中僵尸进程是如何产生的?怎样才能避免僵尸进程的产生?
来源: 互联网 发布时间:2016-06-11
本文导语: RT | 在fork()/execve()过程中,假设子进程结束时父进程仍存在,而父进程fork()之前既没安装SIGCHLD信号处理函数调用 waitpid()等待子进程结束,又没有显式忽略该信号,则子进程成为僵尸进程,...
RT
|
在fork()/execve()过程中,假设子进程结束时父进程仍存在,而父进程fork()之前既没安装SIGCHLD信号处理函数调用 waitpid()等待子进程结束,又没有显式忽略该信号,则子进程成为僵尸进程,无法正常结束,此时即使是root身份kill -9也不能杀死僵尸进程。补救办法是杀死僵尸进程的父进程(僵尸进程的父进程必然存在),僵尸进程成为”孤儿进程”,过继给1号进程init,init始终会负责清理僵尸进程。
产生原因:
1.在子进程终止后到父进程调用wait()前的时间里,子进程被称为zombie。
2.网络原因有时会引起僵死进程。
解决方法:
1.设置SIGCLD信号为SIG_IGN,系统将不产生僵死进程。
2.用两次fork(),而且使紧跟的子进程直接退出,是的孙子进程成为孤儿进程,从而init进程将负责清除这个孤儿进程。
http://hi.baidu.com/wlzqi/blog/item/208cebc4b1c02dab8326ac79.html
产生原因:
1.在子进程终止后到父进程调用wait()前的时间里,子进程被称为zombie。
2.网络原因有时会引起僵死进程。
解决方法:
1.设置SIGCLD信号为SIG_IGN,系统将不产生僵死进程。
2.用两次fork(),而且使紧跟的子进程直接退出,是的孙子进程成为孤儿进程,从而init进程将负责清除这个孤儿进程。
http://hi.baidu.com/wlzqi/blog/item/208cebc4b1c02dab8326ac79.html
|
Stop script execution until all jobs running in background have terminated, or until the job number or process id specified as an option terminates. Returns the exit status of waited-for command.
You may use the wait command to prevent a script from exiting before a background job finishes executing (this would create a dreaded orphan process).
A "zombie process", that is, a process whose parent has terminated, cannot be killed (you can't kill something that is already dead), but init will usually clean it up sooner or later.
我是根据以上原文理解的,可能不到位吧。。。lz自己看看吧
You may use the wait command to prevent a script from exiting before a background job finishes executing (this would create a dreaded orphan process).
A "zombie process", that is, a process whose parent has terminated, cannot be killed (you can't kill something that is already dead), but init will usually clean it up sooner or later.
我是根据以上原文理解的,可能不到位吧。。。lz自己看看吧
|
这位够牛x ,直接把大牛 steven richards APUE的里经典实例给否定了。佩服 佩服 呵呵
http://blog.csdn.net/zi_jin/archive/2009/02/04/3861497.aspx