在linux系統中,殭屍程序是已經執行完畢,但是沒有被父程序**的子程序。判斷殭屍程序的乙個方法是使用ps命令檢視程序狀態。如果程序狀態是z,說明這是乙個殭屍程序。
在多程序的程式中,父程序會啟動若干個子程序來處理任務。當子程序退出後,除了在程序表中占用的乙個程序表項,子程序所使用的資源(檔案描述符、記憶體等)都會被釋放。保留子程序的程序表項,是為了把子程序的執行結果告訴給父程序。父程序呼叫waitpid()來得到子程序的執行結果。
如果子程序執行完畢,而父程序沒有退出,也沒有呼叫waitpid()來得到子程序的執行結果,這時,子程序已經不存在了,卻還占用著乙個程序表項。這樣的程序叫做殭屍程序。當父程序呼叫waitpid()後,殭屍程序占用的程序表項被釋放,殭屍程序徹底消失。
如果父程序在呼叫waitpid前退出,子程序(包括殭屍程序)的父程序會變為init程序。由init程序負責**子程序,所以不會產生殭屍程序。
殭屍程序消耗的唯一資源是程序表項。也就是說,如果產生了大量的殭屍程序佔滿了程序表,系統將無法建立新的程序。除此之外,殭屍程序不會對系統造成影響。
殭屍程序不能使用kill來殺死。因為殭屍程序已經執行完畢了,無法殺死。要消除殭屍程序,方法是找到父程序,殺死父程序。這時殭屍程序會由init收回。
下面是乙個展示殭屍程序產生原因的例子。
展示linux系統中殭屍程序的產生原因。
*/#include #include #include #include int main(void) else if (pid == 0) else
return 0;
}
mysql殭屍程序 殭屍程序產生原因和解決方法
在linux系統中,當用ps命令觀察程序的執行狀態時,經常看到某些程序的狀態列為defunct,這就是所謂的 殭屍 程序。殭屍 程序是乙個早已死亡的程序,但在程序表 processs table 中仍佔了乙個位置 slot 由於程序表的容量是有限的,所以,defunct程序不僅占用系統的記憶體資源,...
殭屍程序的產生原因和避免方法
殭屍程序的產生 當乙個程序建立了乙個子程序時,他們的執行時非同步的。即父程序無法預知子程序會在什麼時候結束,那麼如果父程序很繁忙來不及wait 子程序時,那麼當子程序結束時,會不會丟失子程序的結束時的狀態資訊呢?處於這種考慮unix提供了一種機制可以保證只要父程序想知道子程序結束時的資訊,它就可以得...
殭屍程序產生原因等問題記錄
1.殭屍程序產生原因 殭屍程序是當子程序比父程序先結束,而父程序又沒有 子程序,釋放子程序占用的資源,此時子程序將成為乙個殭屍程序。如果父程序先退出 子程序被init接管,子程序退出後init會 其占用的相關資源 當乙個程序建立了乙個子程序時,他們的執行是非同步的。即父程序無法預知子程序會在什麼時候...