为什么会有zombie这种进程?
Linux为什么会设计这样一种进程?一个进程退出时为什么不去检查它自己的子进程是否有zombie的,还要让init进程去clean up。
谁能讲讲zombie进程的设计初衷阿?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
Linux为什么会设计这样一种进程?一个进程退出时为什么不去检查它自己的子进程是否有zombie的,还要让init进程去clean up。
谁能讲讲zombie进程的设计初衷阿?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(8)
>>一个进程退出时为什么不去检查它自己的子进程是否有zombie的,还要让init进程去clean up。
父进程退出的时候子进程 可能还在运行.此时子进程不是zombie.检查有所多余. 父进程只有在显示的调用wait ,waitpid等函数的时候才去理会子进程的退出. 这个由程序员自己把握.
你可以考虑这种情况:
父进程有可能是被一个不可捕捉信号SIGKILL杀掉的.此时父进程需要立即结束.也不应该让他处理子进程的退出状态.
以上都是个人看法.
ok, 先同意你的看法,那继续往下想,那为什么一个子进程在结束时,系统不立即回收它的资源,而非要等到父 进程调用wait或者是等到父进程结束时,系统init进程才动作,这个回收时机的选择有什么玄机呢?
这一点很好解释了. 因为子进程的退出状态很重要.父进程可以选择获得它进行继续的处理.(主动获得)
确实如此,刚看到些资料,再看了你讲的,明白了。
子进程结束时会给父进程发送一个SIGCHLD的信号,父进程可以选择处理这个信号,就ok了
thanks anyway!
signal(SIGCHLD,SIG_IGN); //让父进程自动回收子进程
不是每个OS都通用
关于这个问题可以阅读
(1):<<Linux内核设计与实现>>的2.4那一节:进程终结,里面解释的比较清楚.
(2):<<Linux网络编程>>6.5:进程中止和6.6处理子进程死亡这两部分,讲的更是详细
可能让我说出来就不太清楚了,呵呵
<<Linux网络编程>>也讲这些?