僵死进程是怎么被回收的?
父进程fork了子进程。父进程没有安装SIGCHLD信号处理。在子进程exit的时候,父进程并没有运行到wait,可能过了很久,父进程wait了,此时还能回收僵死的子进程么?是怎么回收的?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
父进程fork了子进程。父进程没有安装SIGCHLD信号处理。在子进程exit的时候,父进程并没有运行到wait,可能过了很久,父进程wait了,此时还能回收僵死的子进程么?是怎么回收的?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(3)
你这概念上是不是有个误点。子进程exit了,所谓的“terminated”,并不是说它就立即就消失了,它事实上就是直接变成zombie,然后等待parent process去reap它。如果parent一直没有调用wait或waitpid之类的方法就直接exit了,那这个zombie就会reparent到init进程。
你读
man 3 wait
:和
man 3 exit
:我找了一张图《The Life Cycle of a Process》:
https://www.andrew.cmu.edu/course/15-440-s13/applications/ln/lecture2.html
子进程挂了就等着父进程来给它收尸。如果父进程不给它收尸就退出了,那么交给init来收尸。
其实进程退出后其相关的内存等资源已经释放了,只剩下一个task struct结构在进程表中躺着吓唬人。
手工kill sigchild 信号到parent进程