使用top
基于和gui的命令,System Monitor
我可以看到目前有几个僵尸进程。
什么是僵尸进程?
它们是否会影响僵尸所针对的系统或应用程序的性能。他们使用过多的内存还是根本没有使用任何内存?
使用top
基于和gui的命令,System Monitor
我可以看到目前有几个僵尸进程。
什么是僵尸进程?
它们是否会影响僵尸所针对的系统或应用程序的性能。他们使用过多的内存还是根本没有使用任何内存?
Answers:
僵尸是DEAD进程。它们不能被“杀死”(您不能杀死DEAD)。所有进程最终都会死亡,并且一旦完成,它们就会变成僵尸。它们几乎不消耗资源,这是预料之中的,因为它们已经死了!造成僵尸的原因是僵尸的父级(进程)可以检索僵尸的退出状态和资源使用情况统计信息。父级使用wait()系统调用之一向操作系统发出信号,通知它不再需要僵尸。
进程死亡时,其所有子进程都将成为进程号1(即初始化进程)的子进程。初始化总是``等待''着孩子的死亡,这样他们就不会成为僵尸了。
如果您有僵尸进程,则意味着这些僵尸尚未由其父级等待(请查看上显示的PPID ps -l
)。您有三个选择:修复父进程(使其等待);杀死父母 或忍受它。请记住,使用它并不难,因为僵尸在ps输出中仅占用多于一行。
通过在STAT列中出现“ Z”,可以在Unix ps命令的输出中识别出僵尸。存在时间短的僵尸通常表示父程序中存在错误。与其他泄漏一样,少量僵尸本身并不令人担心,但可能表明在重负载下该问题会变得越来越严重。
要从系统中删除僵尸,可以使用kill命令将SIGCHLD信号手动发送给父级。如果父进程仍然拒绝收割僵尸,则下一步将是删除父进程。当进程失去其父级时,init会成为其新的父级。Init定期执行wait系统调用,以将init作为父级的所有僵尸都收割。
也有一些孤立进程,这些孤立进程是其父进程已完成或终止的计算机进程。
当客户端进程在向服务器发出请求后崩溃时,进程可能会在远程调用期间变得孤立。
孤儿浪费服务器资源,并有可能使服务器陷入困境(这是僵尸和孤儿之间最大的资源区别(除非您看到一些孤儿僵尸电影)。但是,有几种解决孤儿进程问题的方法:
消灭是最常用的技术。在这种情况下,孤立进程被杀死。
转世是一种技术,其中机器定期尝试定位任何远程计算的父级;在这一点上,孤立的进程被杀死。
到期是一种技术,其中每个进程在被杀死之前都分配了一定的时间来完成。如果需要,可以在分配的时间到期之前“询问”更多时间来完成。
也可以孤立一个进程与其父进程在同一台计算机上运行。在类似UNIX的操作系统中,任何孤立的进程都会被特殊的“ init”系统进程立即采用。此操作称为重新父母,并自动发生。即使从技术上说,该进程将“ init”进程作为其父进程,但由于最初创建该进程的进程已不存在,因此仍称为孤立进程。
更多信息:
http://wiki.answers.com/Q/What_is_Zombie_Process_and_Orphan_Process#ixzz1PCN9vojU
http://www.linuxsa.org.au/tips/zombies.html
http://www.brighthub.com/computing/linux/articles/79186.aspx
init
要求wait
它的所有子进程是僵尸,孤儿(已收养)还是生物学(自产)?
当child process
终止时,将其死亡通知给其父级,以便父级可以采取一些适当的措施。
一个process
正在等待它的父接受它的返回码被称为僵尸进程。
他们有completed their execution
,但仍然有一个entry
在process table
。
僵尸进程是已停止运行的进程,但它们的进程表条目仍然存在,因为父进程尚未通过wait syscall检索到它。从技术上讲,每个终止过程在很短的时间内都是僵尸,但它们可以生存更长的时间。
当子进程完成后父进程不调用wait syscall时,将出现更长寿的僵尸进程。发生这种情况的一种情况是,当父进程的编写不佳,仅忽略了wait调用,或者当父进程在子进程之前死亡而新的父进程没有对其调用wait时。当进程的父进程在子进程之前死亡时,操作系统会将子进程分配给“ init”进程或PID1。即,init进程“采用”子进程并成为其父进程。这意味着现在子进程退出时,新的父进程(init)必须调用wait来获取其退出代码,否则其进程表条目将永远保留并成为僵尸