僵尸进程是否最终会被init进程接管?两段描述为何冲突?
关于《The Linux Programming Interface》中僵尸进程描述的困惑与澄清
我正在阅读《The Linux Programming Interface》一书,发现书中关于僵尸进程的两段描述似乎存在冲突:
当父进程调用wait()时,内核会移除僵尸进程,因为不再需要该子进程的剩余信息。另一方面,如果父进程未调用wait()就终止,init进程会接管该子进程并自动执行wait(),从而将僵尸进程从系统中移除。
如果父进程创建子进程后未调用wait(),则该僵尸子进程的条目会永久保留在内核进程表中。若大量此类僵尸子进程被创建,最终会填满内核进程表,阻碍新进程的创建。
第一段表示,即使父进程未调用wait()就终止,init进程会接管僵尸进程并在其终止时清理。而第二段则称,若父进程未调用wait(),其长期运行的子进程会变为僵尸进程并永久占用内核进程表。我对此感到困惑:既然init进程会处理僵尸进程,第二段描述的情况为何会发生?或者init进程在何种情况下不会接管僵尸进程?
[更新] 我确实误读了文本,感谢Barmar的指正,这两段描述的是不同场景。
内容的提问来源于stack exchange,提问作者my_question
相关产品推荐
相关产品推荐

