我应该在系统中杀死僵尸进程吗?


20

由于我是Linux / Unix系统的新手,并且刚刚阅读有关僵尸进程的信息,因此我有一个问题。我现在有10个。我需要杀死他们吗?如果是,为什么?它们是我系统上的负载吗?

592 processes: 581 sleeping, 1 running, 10 zombie, 0 stopped

25
无需杀死他们。他们已经死了。
马可(Marco)

2
因此,它们不再加载我的系统。而且它们将一直保持这种状态,直到我重新启动系统或杀死它们,对吗?
杰森·帕德

7
@Marco:你无法杀死已经死亡的东西。但是你可以杀死它的父母,无药可救!
wullxz 2012年

7
问题是他们的父母(他们去世时)没有收割他们。
ypercubeᵀᴹ

3
10只僵尸??? 你出没了!运行杰森运行。
卢克M

Answers:


29

您无法杀死僵尸,它已经死了。

该进程的资源是免费的,可供其他进程使用。剩下的就是过程表中的条目。不必担心,这不会影响性能。


是的,这很有意义。我可以杀死父进程。谢谢你的信息。我只是想知道它们是否加载或没有系统。
杰森·帕德

我相信僵尸数量有限。我认为它是1024,所以它不会影响性能,但是我认为您可以拥有一个上限。
ProfessionalAmateur

@ProfessionalAmateur如果您达到僵尸限制(1024或其他水平),会发生什么?
冰冻豌豆罗迪(Roddy of the Frozen Peas)2012年

@RoddyoftheFrozenPeas-老实说,我不确定,在达到这一点之前,我总是清理过它们。我想系统会尝试创建另一个僵尸,并且可能存在内存冲突或其他某种硬错误,溢出或分段错误。
ProfessionalAmateur

2
@ProfessionalAmateur:Linux中没有僵尸限制/proc/sys/kernel/pid_max像其他所有PID一样,僵尸PID也会受制于。
rsaw 2012年

16

这些在ps中显示的僵尸进程是什么?我杀了他们,但他们没有消失!

僵尸是死进程。您无法杀死死者。所有进程最终都会死亡,并且一旦完成,它们就会变成僵尸。它们几乎不消耗资源,这是预料之中的,因为它们已经死了!造成僵尸的原因是僵尸的父级(进程)可以检索僵尸的退出状态和资源使用情况统计信息。父级使用wait()系统调用之一向操作系统发出信号,通知它不再需要僵尸。

进程死亡时,其所有子进程都将成为进程号1(即初始化进程)的子进程。Init 总是 在等待孩子死,以免他们成为僵尸。

如果您具有僵尸进程,则意味着这些僵尸尚未被其父级等待(请查看ps -l显示的PPID)。您有三个选择:修复父进程(使其等待);杀死父母 或忍受它。请记住,使用它并不难,因为僵尸在ps输出中仅占用多于一行。

资料来源:http : //www.linuxsa.org.au/tips/zombies.html

而且,如果您正在大肆杀戮,那么这个超级用户线程可能对您很有趣: 如何找到僵尸进程的父进程?


请注意,固定父母可能是徒劳的-也许还没到要等孩子的地步。也许以后会做(或者是,也许不会)。
罗曼2012年

你是对的。我链接的问题的答案告诉您如何确定父流程。因此,您总是有机会检查哪些进程创建了僵尸,并确定是否有必要使其继续运行。
wullxz 2012年

7

您无需杀死它们。

建立一些基本的了解:

每个进程都是父进程的子进程(init进程除外,但我们不必为此担心)。

当子进程完成执行时,它可能仍包含父进程要访问的数据,通常是描述子进程结果的退出代码(成功吗?是否出错?错误代码是什么?)。

一个完成的子进程作为僵尸进程在进程表中徘徊,直到父进程“收获”或等待子进程为止,这只是父进程告诉操作系统不再需要该子进程。它已读取所需的任何返回值,并已完成。此时,系统将清除过程表中的条目。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.