什么是僵尸进程?

Jes*_*per 153 process zombie

使用类似的命令top和基于 gui 的命令,System Monitor我可以看到目前我有几个僵尸进程。

什么是僵尸进程?

它们是否会影响系统或它们所依赖的应用程序的性能。他们是否使用了太多内存或根本没有任何内存?

Lui*_*ado 178

僵尸是死进程。他们不能被“杀死”(你不能杀死死者)。所有进程最终都会死亡,当它们死亡时,它们会变成僵尸。他们几乎不消耗资源,这是意料之中的,因为他们已经死了!僵尸的原因是僵尸的父进程(进程)可以检索僵尸的退出状态和资源使用统计信息。父级通过使用wait()系统调用之一向操作系统发出信号,表明它不再需要僵尸。

当一个进程死亡时,它的子进程都成为进程号 1 的子进程,也就是 init 进程。Init总是在等待孩子们死去,这样他们就不会成为僵尸。

如果您有僵尸进程,则意味着它们的父进程尚未等待这些僵尸进程(查看由 显示的 PPID ps -l)。你有三个选择:修复父进程(让它等待);杀死父母;或与之共存。请记住,与它共存并不难,因为僵尸在 ps 的输出中只多占用了一行。

僵尸可以在 Unix ps 命令的输出中通过 STAT 列中是否存在“Z”来识别。僵尸存在时间超过短时间通常表明父程序中存在错误。与其他泄漏一样,一些僵尸的存在本身并不令人担忧,但可能表明问题在较重的负载下会变得严重。

要从系统中删除僵尸,可以使用 kill 命令手动将 SIGCHLD 信号发送到父级。如果父进程仍然拒绝收割僵尸,下一步将是删除父进程。当一个进程失去它的父进程时,init 成为它的新父进程。Init 会定期执行 wait 系统调用,以获取任何以 init 为父节点的僵尸。

还有孤儿进程,它们是其父进程已完成或终止的计算机进程。

当客户端进程在向服务器发出请求后崩溃时,进程可能在远程调用期间成为孤立的。

孤儿浪费服务器资源并可能使服务器陷入困境(这是僵尸和孤儿之间最大的资源差异(除非您看到一些孤儿僵尸电影)。但是有几种解决孤儿进程问题的方法:

  1. 灭绝是最常用的技术;在这种情况下,孤儿进程被杀死。

  2. 轮回是一种技术,其中机器定期尝试定位任何远程计算的父项;此时孤立进程将被杀死。

  3. 过期是一种技术,其中每个进程在被杀死之前都被分配了一定的时间来完成。如果需要,进程可能会“要求”更多时间在分配的时间到期之前完成。

进程也可以孤立地运行在与其父进程相同的机器上。在类 UNIX 操作系统中,任何孤立的进程都会立即被特殊的“init”系统进程采用。此操作称为重新养育并自动发生。尽管从技术上讲该进程将“init”进程作为其父进程,但它仍然被称为孤儿进程,因为最初创建它的进程不再存在。

更多信息:

  • 嗯!你可以杀死死者!你只需要瞄准头部。还是他们一直在骗我们? (22认同)

var*_*tec 22

僵尸进程(也显示为<defunct>),根本不是真正的进程。它们只是内核进程表中的条目。这是他们消耗的唯一资源。它们不消耗任何 CPU 或 RAM。拥有僵尸的唯一危险是进程表中的空间不足(您可以使用它cat /proc/sys/kernel/threads-max来查看系统上允许有多少条目)。

它们只有在它们的父进程(即fork()'ed它们所在的进程)还活着,但还没有调用wait()系统函数时才会出现。一旦父母死亡,僵尸是wait()'ed通过init和消失。

  • [这个问题](http://askubuntu.com/questions/30891/is-there-any-way-to-kill-a-zombie-process-without-reboot)中的`top``截图似乎与你相矛盾? 在那里,僵尸似乎使用了 1 个 CPU 的 100%,但没有内存。 (4认同)

Pra*_*shi 9

当 achild process终止时,它的死亡被传达给它的父母,以便父母可以采取一些适当的行动。

一个process正在等待它的父接受它的返回码被称为僵尸进程

他们有completed their execution但仍然entryprocess table.