linux下殭屍程序和孤兒程序

2021-10-01 09:51:33 字數 1513 閱讀 6273

子程序是通過父程序建立的,子程序也可以繼續建立子程序。父程序無法**子程序到底什麼時候結束,當乙個子程序結束之後,它的父程序需要呼叫wait()或者waitpid()系統呼叫取得子程序的終止狀態。

殭屍程序 :

子程序結束了,但是父程序沒有呼叫wait()或者waitpid()取得子程序的終止狀態,這個子程序將變成乙個殭屍程序。

利用命令ps,可以看到有標記為z的程序就是殭屍程序。

殭屍程序危害:

系統中的程序數量是有限的,雖然殭屍程序占用的資源和記憶體都比較少,但是它卻占領著數字,可能會導致系統無法再建立新的程序,因此及時清除殭屍程序很重要!

避免殭屍程序:

1、通過訊號機制,子程序退出時向父程序傳送sigchild訊號,父程序處理sigchild訊號。在訊號處理函式中呼叫wait進行處理殭屍程序。

兩次fork()

原理是將子程序成為孤兒程序,從而其的父程序變為init程序,通過init程序可以處理殭屍程序。

處理殭屍程序:

把父程序殺掉。父程序死後,殭屍程序成為"孤兒程序",過繼給1號程序init,init始終會負責清理殭屍程序。它產生的所有殭屍程序也跟著消失。

構造殭屍程序,子程序退出,父程序未退出,未wait

#include

#include

#include

int main (

)else

return0;

}

使用訊號解決

#include

#include

#include

#include

#include

#include

void

sig_child

(int signo)

int main (

)else

return0;

}

兩次fork解決,第二個子程序為孤兒程序

#include

#include

#include

#include

#include

int main (

)else

if(fpid ==0)

else

}else

exit(0

);}return0;

}

孤兒程序:父程序先與子程序結束,子程序就由init(程序號為1)來接管他,成為他的父程序,此時稱這個程序為孤兒程序,其狀態收集工作由init程序負責。

孤兒程序並不會有什麼危害。

構造孤兒程序,父程序退出,子程序未退出

#include

#include

int main (

)else

return0;

}

守護程序(daemon)是在一類脫離終端在後台執行的程式, 通常以 d 結尾, 隨系統啟動, 其父程序 (ppid) 通常是 init 程序。

Linux殭屍程序和孤兒程序

程式執行到結尾的時候,有兩種情況。子程序先退出,或者父程序先退出。如果父程序先退出的話,那麼子程序就會變成孤兒程序,最後被init接管,我們來看乙個例子。我們可以看到子程序的父程序變成了init,孤兒程序並不可怕,它們最後會被統一銷毀。但是如果子程序先退出呢?子程序先退出有兩種情況 1.呼叫wait...

殭屍程序和孤兒程序

殭屍程序 乙個子程序在其父程序還沒有呼叫wait 或waitpid 的情況下退出。這個子程序就是殭屍程序。孤兒程序 乙個父程序退出,而它的乙個或多個子程序還在執行,那麼那些子程序將成為孤兒程序。孤兒程序將被init程序 程序號為1 所收養,並由init程序對它們完成狀態收集工作。殭屍程序將會導致資源...

殭屍程序和孤兒程序

什麼是殭屍程序?乙個子程序在其父程序沒有呼叫wait 或waitpid 的情況下退出。這個子程序就是殭屍程序。如果其父程序還存在而一直不呼叫wait,則該殭屍程序將無法 等到父程序結束後,會被init 驗證 include include includeint main 3秒後查詢其程序資訊 通過上...