6

维基百科基本上提供了我需要知道的有关僵尸进程的所有可能信息,但只是简单地说明了它的用途。如果父进程创建另一个子进程,PID 冲突将不会存在。

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

或者还有其他原因说明为什么应该存在僵尸进程?

4

3 回答 3

18

僵尸进程实际上非常重要并且肯定需要存在。首先,了解进程创建在 Unix/Linux 中的工作原理很重要。创建新进程的唯一方法是让现有进程通过fork(). 这样,系统上的所有进程都被安排在一个漂亮有序的树状层次结构中。尝试ps -Hu <your username>在 Linux 系统上运行以查看您拥有的进程的层次结构。

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

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

这就是为什么需要僵尸进程的原因。

脚注:如果父进程从不调用wait(),则init当父进程死亡时,子进程将重新成为该进程的父进程,init并将wait()为子进程。

于 2013-06-05T15:04:41.250 回答
7

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

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

于 2013-05-07T10:37:37.727 回答
-3

僵尸进程很有用。

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

没有清理其子僵尸的进程没有正确编程。

于 2013-05-07T16:03:55.820 回答