Process
殭屍程序和退出初始化
假設我出於某種原因決定不再
wait
在我編寫的任何程序中使用系統呼叫。這是否意味著我的記憶中會被他們父親沒有等待的所有完成的過程弄得一團糟?
這是學術作業的一部分,我覺得這個問題有點令人困惑,因為我的回答聽起來都可以接受。
這就是我回答這個問題的方式,如果這確實是真的,我只是想要回饋。
如果父程序在退出之前沒有等待他的子程序 - 這些子程序將連結到父程序
init
的exit
呼叫(函式內部forget_original_parent()
)上的程序。在某些時候,init 程序將擁有比它所能容納的更多的程序——關於記憶體限制。
因此,不呼叫
wait
確實會使記憶體混亂。另外,我想澄清一下在這種情況下會發生什麼?機器是否關閉並退出初始化程序?如果是這樣的話,所有 init 的孩子都發生了什麼?
在某些時候,init 程序將擁有比它所能容納的更多的程序——關於記憶體限制。
不完全是:殭屍程序(已退出但尚未被回收的程序)不佔用其父程序的記憶體;它們佔用核心程序表中的記憶體。
如果你
init
是一個“標準”init
,它無論如何都會收穫殭屍程序,你不會遇到任何問題。如果您
init
也忽略子程序,它仍然不會遇到可能導致它被殺死的限制。將發揮作用的主要限制是最大程序數;達到這一點將阻止創建新流程,這將立即導致問題(不斷創建流程)。系統將繼續執行,但您將無法登錄,您只能使用現有的 shell 等。