为什么僵尸进程是必要的?

维基百科基本上给出了我需要知道的关于僵尸进程的所有可能的信息,只是简单地介绍了它可能是有用的。因为在父进程创build另一个subprocess的事件中,PID中的冲突不会存在。

这是如何真正“有用”? 如果命名的僵尸进程被移除而不是被保留在那里,PID是不是可用的?

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

僵尸进程是有用的。

僵尸进程允许父母保证能够检索子进程的退出状态,会计信息和进程ID。

不清理其小孩僵尸的过程没有正确编程。

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

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

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

这就是为什么一个僵尸进程必要的。

脚注:如果父进程从不调用wait() ,那么当父进程死亡时,子进程将被重新initinit进程, initwait()该子进程。

答案也在维基百科上,也就是:

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