由于我是 Linux/Unix 系统的新手,刚刚阅读僵尸进程,我有一个问题。我现在有 10 个。我需要杀死它们吗?如果需要,为什么?它们会给我的系统带来负担吗?
592 processes: 581 sleeping, 1 running, 10 zombie, 0 stopped
答案1
你无法杀死僵尸,它已经死了。
该进程的资源是空闲的,可供其他进程使用。剩下的只是进程表中的条目。这不会影响性能,不用担心。
答案2
ps 中出现的这些僵尸进程是什么?我杀死了它们,但它们没有消失!
僵尸进程是死进程。您无法杀死死进程。所有进程最终都会死亡,当它们死亡时,它们就会变成僵尸进程。它们几乎不消耗任何资源,这是意料之中的,因为它们已经死了!僵尸进程存在的原因在于,僵尸进程的父进程(进程)可以检索僵尸进程的退出状态和资源使用情况统计信息。父进程使用 wait() 系统调用之一向操作系统发出信号,表示它不再需要僵尸进程。
当一个进程死亡时,它的子进程都将成为进程号 1 的子进程,即 init 进程。Init 是总是 等待孩子们死去,这样他们就不会再像僵尸一样。
如果您有僵尸进程,则意味着这些僵尸进程的父进程没有等待它们(查看 ps -l 显示的 PPID)。您有三个选择:修复父进程(让其等待);终止父进程;或者忍受它。请记住,忍受它并不难,因为僵尸进程在 ps 的输出中只占用一行多一点的内容。
来源:http://www.linuxsa.org.au/tips/zombies.html
如果你正在疯狂杀人,这个超级用户线程可能会让你感兴趣: 如何找到僵尸进程的父进程?
答案3
你不需要杀死他们。
建立一些基本的理解:
每个进程都是父进程的子进程(除了 init 进程,但我们不需要担心这一点)。
当子进程完成执行时,它可能仍然包含父进程想要访问的数据,通常是描述子进程结果的退出代码(成功了吗?出错了吗?错误代码是什么?)。
已完成的子进程将作为僵尸进程在进程表中徘徊,直到父进程“收割”或等待子进程,这只是父进程告诉操作系统它不再需要该子进程;它已读取了所需的所有返回值,并且已完成。此时,系统将清理进程表中的条目。
答案4
这个过程不需要被终止。
万一你确实想杀死它(无论出于什么原因),请确保你射击的是头部,这里有一个有用的命令:
kill -HUP `ps -A -ostat,ppid | grep -e '^[Zz]' | awk '{print $2}'`