因此,當孩子死亡的父母得到SIGCHLD
,但如果父母在等待之前死亡(),孩子將被重新規劃爲init
。目前這個孩子是zombie
,即<defunct>
。未成年子女及其未來
接下來會發生什麼?
請問init
等待那個孩子嗎?如果是的話,它什麼時候做?有關時間限制的任何保證?
因此,當孩子死亡的父母得到SIGCHLD
,但如果父母在等待之前死亡(),孩子將被重新規劃爲init
。目前這個孩子是zombie
,即<defunct>
。未成年子女及其未來
接下來會發生什麼?
請問init
等待那個孩子嗎?如果是的話,它什麼時候做?有關時間限制的任何保證?
是的,init
會立即收穫所有的孩子。如果你製作了一個忽略SIGCHLD
的過程並且積累了很多殭屍,你可以通過你描述的機制殺死那個父母來消滅它們。
此處爲多用戶模式下的init
的主循環。 requested_transition
由信號init
設置(如經典kill -1 1
閱讀更新inittab
):
while (!requested_transition)
if ((pid = waitpid(-1, (int *) 0, 0)) != -1)
collect_child(pid);
(collect_child
處理這樣的init在過程中的一些特殊利益的案件,如登錄shell現在需要一個新的getty
)
感謝您的回答。如果`init`立即收割,爲SIGCHLD定義一個顯式處理程序來執行wait()是否沒有意義?我體驗到擁有這樣的處理程序非常有用。它比'init'快得多。你同意嗎? – hari 2011-12-14 00:35:39
不確定你的措辭,但要澄清,從死亡到其父母(原始父母或初始母親)等待的時間之間,孩子是一個殭屍。你的問題的措辭意味着孩子在父母去世後才變成殭屍。 – 2011-12-13 23:54:01