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

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

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

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

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

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

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

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

答案1

我有2個答案:

如果父進程死亡/結束,則該進程將由 init 繼承。 init 會為你做這件事。因此,對於短期流程,您不必擔心。建議應致電waitexit

我認為 bash 呼叫 wait 並將退出程式碼放在某處。

wait只取得退出程式碼,然後收穫進程。 zombi 使用很少的資源,除了進程表中的一個槽:進程 ID 等之外,所有資源都被釋放。

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

相關內容