linux如何处理僵尸进程

Atu*_*tur 12 linux zombie-process

僵尸进程是在 Unix/Linux 系统中创建的。我们可以通过kill命令删除它们。

但是 Linux 中是否有任何内置的清理机制来处理僵尸进程?

Gil*_*il' 19

僵尸进程已经死了。你不能杀死他们。该kill命令或系统调用对僵尸进程没有任何影响。(你可以用 使僵尸消失kill,但你必须射击父母,而不是僵尸,我们稍后会看到。)

僵尸进程并不是真正的进程,它只是进程表中的一个条目。没有与僵尸进程相关的其他资源:它没有任何内存或任何正在运行的代码,它没有打开任何文件,等等。

当一个进程死亡时,在清理所有其他资源之后,最后要做的就是进程表中的条目。该条目被保留,形成僵尸,以允许父进程跟踪子进程的退出状态。父级通过调用wait系统调用系列之一来读取退出状态;此时,僵尸消失了。wait据说呼唤会收获孩子,扩展了僵尸死了但在某种程度上仍未完全处理到来世的隐喻。家长也可以表明,它并不关心(通过忽略SIGCHLD信号,或致电sigactionSA_NOCLDWAIT标志),在这种情况下,在进程表条目被删除的儿童死亡时立即。

因此,僵尸仅在进程已死亡且其父进程尚未调用时才存在wait。只要父级仍在运行,此状态就可以持续。如果父进程在子进程之前死亡或者没有读取子进程的状态就死亡,则僵尸进程的父进程被设置为 PID 为 1 的进程,即init. 的工作之一initwait在循环中调用,从而获得其父进程留下的任何僵尸进程。


chr*_*hrk 6

你不是kill僵尸进程,因为它已经死了。

僵尸进程必须wait由它们的父进程编辑,以便收集它们的退出状态。

Linux 中唯一的“内置清理机制”适用于任何父进程在收集其子进程的退出状态之前死亡的情况。在这种情况下,每个子init进程都由进程继承,该进程将wait在子进程上收集其退出状态并删除其在进程表中的条目。