參考博文
殭屍程序:是所有程序都會進入的一種程序狀態,子程序退出,而父程序並沒有呼叫 wait() 或 waitpid() 獲取子程序的狀態資訊,那麼子程序的 pid 和 程序描述符 等資源仍然儲存在系統中,這種程序稱之為殭屍程序 。殭屍程序會一直以終止狀態(釋放了記憶體等資源)保持在程序表裡並會一直等待父程序獲取其退出狀態,但父程序沒有**(父程序出了問題)。
孤兒程序:乙個父程序退出,而它的乙個或多個子程序還在執行,那麼那些子程序將成為孤兒程序。孤兒程序將被 init 程序(centos7 中是 systemd 程序,程序號為 1)所收養,並由 init 程序對它們完成狀態收集工作 。如果程序不呼叫 wait()/waitpid() 的話, 那麼保留的那段資訊就不會釋放,其程序號就會一直被占用,但是系統所能使用的程序號是有限的,如果大量的產生殭屍程序,將因為沒有可用的程序號(或者控制代碼)而導致系統不能產生新的程序, 此即為殭屍程序的危害,應當避免 。
任何乙個子程序(init 除外)在 exit() 之後,都會留下乙個稱為殭屍程序(zombie)的資料結構 。
孤兒程序是沒有父程序的程序,孤兒程序這個重任就落到了 init 程序(或者 systemd 程序)身上,init 程序就好像是乙個民政局,專門負責處理孤兒程序的善後工作。每當出現乙個孤兒程序的時候,核心就把孤 兒程序的父程序設定為 init,而 init 程序會迴圈地 wait() 它的已經退出的子程序。這樣,當乙個孤兒程序淒涼地結束了其生命週期的時候,init 程序就會代表黨和**出面處理它的一切善後工作,因此孤兒程序並不會有什麼危害。
重複強調,任何乙個子程序(init 除外)在 exit() 之後,並非馬上就消失掉,而是留下乙個稱為殭屍程序(zombie)的資料結構,等待父程序處理 。
殭屍程序的出現,追其根本原因,是其父程序出現了問題,在子程序 exit() 後沒有**子程序的資源,而不是 linux 系統的問題;此時執行的程式**邏輯應該是有問題的,需要整改,如果出現殭屍程序,可以通過以下兩種方法解決,第一種方法一般不好用:
# 方法一,傳遞訊號給其父程序,命令其**子程序的資源
kill -chld + 父程序號
# 方法二,直接 kill 掉其父程序,將此程序變成孤兒程序,交給 init 程序管理,init 程序**此程序的資源
kill -9 + 父程序號
孤兒程序 殭屍程序
殭屍程序和孤兒程序 殭屍程序 殭屍程序是乙個比較特殊的狀態,當程序退出並且父程序沒有讀取到子程序的退出碼,就會產生殭屍程序,殭屍程序會一直儲存在程序表中,並且一直等待父程序讀取退出狀態碼。所以,只要子程序退出,父程序還在執行,但是父程序沒有讀取到子程序的狀態,子程序就會進入殭屍狀態。建立乙個殭屍程序...
殭屍程序, 孤兒程序
一,定義 當程序退出並且父程序 使用wait 系統呼叫 沒有讀取到子程序退出的返回 時就會產生殭屍程序。殭屍程序會以終止狀態保持在程序表中,並且會一直在等待父程序讀取退出狀態 簡單來說就是,在父程序中有乙個子程序,該子程序完成父程序交給的任務,子程序完成後會給父程序乙個任務結果返回,但父程序一直沒有...
殭屍程序 孤兒程序
程序在之前分為3個狀態 1.執行狀態 running 正在cpu中執行的程序。2.就緒狀態 ready 已獲得除了處理器外的所需資源,隨時準備著執行的程序。3.阻塞狀態 blocked 因為缺少除了cpu外的其他資源,無法滿足執行條件的程序。殭屍程序 乙個程序使用fork建立子程序,如果子程序退出,...