init的僵尸小孩

僵尸进程如何成为init的孩子? 所有的孩子都不应该等待吗?

我偶尔遇到僵尸进程的父母是初始化。 该理论认为,当进程死亡时,它一直是僵尸,直到它的父母等待或waitpid的。 如果父母死了,那么init会采用这个过程,然后等待。

我正在看这样的过程。 我用strace附加到init。 我确实看到init在一会儿醒来,waitpid在其subprocess中。 但是我确实看到它跳过了它的僵尸孩子。 我想知道这是如何可能的。 有任何想法吗?

对于waitpid()我们可以有不同的实现。 如果内核被设计为应该忽略僵尸线程,那么init可能会跳过它的僵尸线程,并在后期清理它的数据结构。

有关更多详细信息,请参阅waitpid()的手册页

http://man7.org/linux/man-pages/man2/wait.2.html