Linux

這個調度程序會產生殭屍程序嗎?

  • July 9, 2014

我有這樣一個調度程序 shell 腳本。

while read line
do
   java TestProg $line &
done < $tasklist

殭屍程序維基百科頁面上,它說

如果父程序呼叫等待失敗,殭屍程序將留在程序表中,導致資源洩漏

在上面的腳本中我沒有使用該wait函式(我用這種方式編寫了許多調度程序 shell 腳本)。我想知道是否需要wait這樣使用,以便防止殭屍程序:

while read line
do
   java TestProg $line &
done < $tasklist
wait

我有2個答案:

如果父程序死亡/結束,則程序由 init 繼承。init 會為你做的。因此,對於短期執行過程,您不必擔心。建議應該是 callwaitexit

我認為 bash 呼叫會等待您並將退出程式碼放在某處。

wait只獲取退出程式碼,然後收穫該過程。殭屍使用很少的資源,所有資源都被釋放,除了程序表中的一個槽:程序 ID 等。

一個殭屍死了:它的所有資源都被釋放了,除了它在程序表中的槽。其程序表槽未釋放的原因是,父程序(除其他外)可以獲取其返回碼並向剛剛死亡的子程序發出信號,而不會遇到另一個正在重用程序標識 (pid) 的程序。

引用自:https://unix.stackexchange.com/questions/137356