殭屍程序是指子程序退出時,父程序並未對其發出的sigchild訊號進行適當處理,導致子程序停留在殭屍狀態等待其父程序為其收屍,這個狀態下的子程序就是殭屍程序。
#include
#include
#include
int main(int argc,char *argv)
return
0;
}
從上面的執行結果可以看出,父程序在子程序執行未結束前退出,導致子程序被int程序接管(此時父程序id變更為1)。待子程序執行接觸後,子程序資源回被**。
大約10秒後子程序被系統**了,如下圖:
針對上面的情況,c語言提供了wait和waitpid方法,用於捕獲子程序退出的訊號,從而能有效地避免子程序出現「殭屍」狀態的現象。
**如下:
#include
#include
#include
int main(int argc,char *argv)
return
0;
}
執行結果如下:
在使用fork()建立子程序時,應盡量避免出現」殭屍程序」的情況。雖然子程序處於」殭屍」狀態時,系統會將子程序交給init程序接管, 但此時子程序的占用資源並未得到釋放。
Linux 殭屍程序
怎樣產生殭屍程序的 乙個程序在呼叫exit命令結束自己的生命的時候,其實它並沒有真正的被銷毀,而是留下乙個稱為殭屍程序 zombie 的資料結構 系統呼叫 exit,它的作用是使程序退出,但也僅僅限於將乙個正常的程序變成乙個殭屍程序,並不能將其完全銷毀 在linux程序的狀態中,殭屍程序是非常特殊的...
linux殭屍程序
僵死程序 在unix程序模型中,程序是按照父程序產生子程序,子程序產生子子程序這樣的方式建立出完成各項相互協作功能的程序的。當乙個程序完成它的工作終止之後,它的父程序需要呼叫wait 或者waitpid 系統呼叫取得子程序的終止狀態。如果父程序沒有這麼做的話,子程序雖然已經退出了,但是在系統程序表中...
linux 殭屍程序
關於zombie程序 這些程序已經死亡,但沒有釋放系統資源,包括記憶體和一些一些系統表等,如果這樣的程序很多,會引發系統問題。用ps el看出的程序狀態如果是z,就是殭屍程序。ps ef grep defunc可以找出殭屍程序.有些zombie程序時用kill 9也不能殺死,而且消耗了很多系統資源不...