使用像top和基于gui的System Monitor这样的命令,我可以看到目前我有几个僵尸进程。
什么是僵尸过程?
它们是否会影响系统的性能,或者它们是僵尸的应用程序。他们是否使用太多的记忆或任何记忆?
发布于 2011-06-13 22:39:13
僵尸是死亡的过程。他们不可能是‘杀戮’(你不能杀死死者)。所有的过程最终都会死亡,当它们死亡时,它们就会变成僵尸。他们几乎不消耗任何资源,这是意料之中的,因为他们已经死了!僵尸的原因是因为僵尸的父进程(进程)可以检索僵尸的退出状态和资源使用统计信息。父程序通过使用wait()系统调用之一向操作系统发出信号,表示它不再需要僵尸。
当进程死亡时,它的子进程都成为进程号1的子进程,即init进程。因为它总是在等待孩子们死去,这样他们就不会像僵尸一样活下去。
如果您有僵尸进程,这意味着这些僵尸没有被他们的父进程等待(看看ps -l显示的PPID )。您有三个选择:修复父进程(让它等待);杀死父进程;或者接受它。请记住,与它一起生活并不是那么困难,因为僵尸在ps的输出中只需要多出一行。
通过在STAT列中存在一个"Z“,可以在Unix命令的输出中识别僵尸。存在时间超过一段时间的僵尸通常表示父程序中存在错误。与其他漏洞一样,少数僵尸的存在本身并不令人担忧,但可能预示着在更重的负载下,问题会变得更加严重。
要从系统中删除僵尸,可以使用杀死命令手动将SIGCHLD信号发送到父服务器。如果父进程仍然拒绝收获僵尸,下一步将是删除父进程。当进程失去父进程时,init将成为它的新父进程。Init定期执行等待系统调用,以收获任何以init为父级的僵尸。
还有一些孤立进程,它是父进程已完成或终止的计算机进程。
当客户端进程在发出服务器请求后崩溃时,进程可能在远程调用期间成为孤立进程。
孤儿浪费服务器资源,可能会给服务器带来麻烦(这是僵尸和孤儿之间最大的资源差异(除非您看了一些孤儿僵尸电影)。然而,对于孤儿过程问题有几种解决方案:
进程也可以作为父进程运行在同一台机器上。在类似UNIX的操作系统中,任何孤立的进程都将被特殊的"init“系统进程立即采用。这一操作称为重新养育,并自动发生。尽管从技术上讲,进程有"init“进程作为其父进程,但它仍然被称为孤立进程,因为最初创建它的进程不再存在。
更多信息:
发布于 2011-06-14 09:36:03
僵尸进程(也显示为<defunct>)根本不是真正的进程。它们只是内核处理表中的条目。这是他们所消耗的唯一资源。它们不消耗任何CPU或RAM。僵尸的唯一危险是在处理表中耗尽空间(您可以使用cat /proc/sys/kernel/threads-max查看系统中允许多少个条目)。
它们只在其父进程(即fork()'ed它们的进程)还活着时出现,但尚未调用wait()系统函数。一旦父母死亡,僵尸是wait()'ed的init和消失。
发布于 2015-10-14 16:11:08
当一个child process终止时,它的死亡将被传递给它的父方,以便父方可以采取一些适当的行动。
等待其父程序接受其返回代码的process称为僵尸进程。
他们有completed their execution,但在process table中仍然有一个entry。
https://askubuntu.com/questions/48624
复制相似问题