2011-12-13 79 views
1

因此,當孩子死亡的父母得到SIGCHLD,但如果父母在等待之前死亡(),孩子將被重新規劃爲init。目前這個孩子是zombie,即<defunct>未成年子女及其未來

接下來會發生什麼?

請問init等待那個孩子嗎?如果是的話,它什麼時候做?有關時間限制的任何保證?

+0

不確定你的措辭,但要澄清,從死亡到其父母(原始父母或初始母親)等待的時間之間,孩子是一個殭屍。你的問題的措辭意味着孩子在父母去世後才變成殭屍。 – 2011-12-13 23:54:01

回答

2

是的,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

+0

感謝您的回答。如果`init`立即收割,爲SIGCHLD定義一個顯式處理程序來執行wait()是否沒有意義?我體驗到擁有這樣的處理程序非常有用。它比'init'快得多。你同意嗎? – hari 2011-12-14 00:35:39