linux殭屍程序

2021-09-12 08:15:28 字數 617 閱讀 2728

殭屍程序產生的原因:

子程序先於父程序結束,而父程序又沒有呼叫wait或者waitpid函式**子程序,這時候子程序就成為了乙個殭屍程序。但是如果父程序此時結束,系統就會**子程序,即子程序就不是乙個殭屍程序了。殭屍程序產生的條件是父程序還沒結束,但是又不呼叫wait或者waitpid函式**子程序。

另外,如果父程序先於子程序結束,這也就成了有些人所說的孤兒程序。孤兒程序會被init程序接管,即成為了init程序的子程序,此子程序結束後,init程序會**其占用的相關資源。

避免產生殭屍程序的方法

1、父程序在子程序結束後,呼叫wait或者waitpid函式**子程序

2、重寫訊號處理函式sigchld函式,signal(sigchld, handler);在訊號處理函式handler中呼叫wait或者waitpid函式**子程序。系統會在子程序結束後給父程序傳送sigchld訊號。

3、如果父程序不關心子程序什麼時候結束,那麼可以用signal(sigchld,sig_ign) 通知核心,自己對子程序的結束不感興趣,那麼子程序結束後,核心會**, 並不再給父程序傳送訊號。

參考這篇文章:**三種特殊程序:孤兒程序,殭屍程序和守護程序.

Linux 殭屍程序

怎樣產生殭屍程序的 乙個程序在呼叫exit命令結束自己的生命的時候,其實它並沒有真正的被銷毀,而是留下乙個稱為殭屍程序 zombie 的資料結構 系統呼叫 exit,它的作用是使程序退出,但也僅僅限於將乙個正常的程序變成乙個殭屍程序,並不能將其完全銷毀 在linux程序的狀態中,殭屍程序是非常特殊的...

linux殭屍程序

僵死程序 在unix程序模型中,程序是按照父程序產生子程序,子程序產生子子程序這樣的方式建立出完成各項相互協作功能的程序的。當乙個程序完成它的工作終止之後,它的父程序需要呼叫wait 或者waitpid 系統呼叫取得子程序的終止狀態。如果父程序沒有這麼做的話,子程序雖然已經退出了,但是在系統程序表中...

linux殭屍程序

殭屍程序是指子程序退出時,父程序並未對其發出的sigchild訊號進行適當處理,導致子程序停留在殭屍狀態等待其父程序為其收屍,這個狀態下的子程序就是殭屍程序。include include include int main int argc,char argv return 0 從上面的執行結果可以...