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

Jas*_*dle 20 linux process

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

592 processes: 581 sleeping, 1 running, 10 zombie, 0 stopped
Run Code Online (Sandbox Code Playgroud)

Mar*_*rco 29

你不能杀死僵尸,它已经死了。

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

  • @ProfessionalAmateur:Linux 中没有*僵尸限制*。僵尸 PID 受制于 `/proc/sys/kernel/pid_max`,就像其他 PID 一样。 (2认同)

wul*_*lxz 16

ps中出现的这些僵尸进程是什么?我杀了他们,但他们不走!

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

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

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

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

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


Dar*_*oid 7

你不需要杀死他们。

建立一些基本的理解:

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

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

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