kill - does it kill the process right away?
我找到了答案,并为 SIGCHLD
设置了一个信号处理程序,并在该处理程序中引入了 wait
。这样,无论何时父进程kill
一个子进程,都会调用此处理程序并调用wait
来获取 子进程。 - 动机是清除进程表条目。
我仍然看到一些子进程运行了几秒钟,即使它的父进程没有死。 - 这怎么可能?
我是通过 ps
看到的。精确地 ps -o user,pid,ppid,command -ax
和 greping 用于父进程、子进程和 defunct。
最佳答案
进程在退出时立即失效(僵尸)(从信号、调用 exit
、从 main
返回,等等)。它会一直保持僵尸状态,直到它的父级等待
。
因此,所有进程在退出时至少会暂时变成僵尸。
如果父进程在调用 wait
之前需要一点时间(因为它正在做其他工作,或者只是因为调度程序还没有给它 CPU 时间),那么你会看到僵尸就一点点。如果父进程从不调用 wait
,那么当它最终退出时,init
(pid 1) 将收养它的僵尸子进程,并对它们调用 wait
.
关于子进程可以 <defunct> 而父进程不死吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8481803/