为什么需要僵尸进程?

时间:2013-05-07 10:30:26

标签: linux unix process fork zombie-process

维基百科基本上提供了我需要知道的关于僵尸进程的所有可能信息,但只是关于它如何有用的简单线路......因为在父进程创建另一个子进程的情况下,PID中的冲突将不存在。

这实际上是如何“有用”的?如果要删除命名的僵尸进程而不是保留在那里,那么PID是不是可用?

还有其他原因可以解释为什么僵尸进程应该存在吗?

3 个答案:

答案 0 :(得分:15)

僵尸进程实际上非常重要,绝对需要存在。首先,了解流程创建在Unix / Linux中的工作原理非常重要。创建新流程的唯一方法是让现有流程通过fork()创建新的子流程。通过这种方式,系统上的所有进程都排列在一个很好的有序树的层次结构中。尝试在Linux系统上运行ps -Hu <your username>以查看您拥有的进程的层次结构。

在许多程序中,父进程能够获取有关已退出的子进程的基本信息至关重要。该基本信息包括孩子的退出状态和资源使用情况。当父级准备好获取有关死子进程的信息时,它会调用其中一个wait()函数来等待子进程退出并获取退出状态和资源使用信息。

但是,如果子进程在父进程等待之前退出,会发生什么? 这是僵尸进程变得必要的地方。操作系统不能只丢弃子进程;父进程的操作可以取决于知道子进程的退出状态或资源使用情况。即,父进程可能需要知道子进程异常退出,或者它可能正在为其子进程收集CPU使用情况统计信息等。因此,唯一的选择是保存该信息并使其最终可用于父进程。致电wait()。这些信息是僵尸进程的信息,也是进程管理在Unix / Linux上运行的关键部分。僵尸进程允许父母保证能够检索子进程的退出状态,记帐信息和进程ID,,无论父进程在子进程退出之前还是之后调用wait()

这就是zombie进程 的必要条件。

脚注:如果父进程从不调用wait(),那么当父进程终止时,子进程将重定位到init进程,而initwait()为{{1}}孩子。

答案 1 :(得分:5)

答案也在维基百科上,即:

  

仍需要此条目以允许父进程读取它   孩子的退出状态。

答案 2 :(得分:-3)

僵尸进程很有用。

Zombie进程允许父母保证能够检索子进程的退出状态,记帐信息和进程ID。

未清理其子僵尸的进程编程不正确。