zombie进程如何成为init的子进程?难道不是应该对所有孩子进行等待吗?
我偶尔会遇到父级为init的僵尸进程。该理论认为,当流程死亡时,它仍然是僵尸,直到它的父母等待或等待它。如果parent已经死了,那么init会采用进程,它会等待。
我现在正在看这样的过程。我用strace附加到init。我确实看到init偶尔醒来并且等待其子进程的waitpid。但我确实看到它跳过了它的僵尸孩子。我想知道这是怎么可能的。有什么想法吗?
答案 0 :(得分:1)
我们可以为waitpid()提供不同的实现。 如果内核的设计方式应该忽略僵尸线程,那么init可能会跳过它的僵尸线程并在后期清理它的数据结构。
有关更多详细信息,请参阅waitpid()
的手册页