天天看點

僵屍程序,孤兒程序

一、定義,什麼是僵屍程序、孤兒程序

孤兒程序:一個父程序退出,而它的一個或多個子程序還在運作,那麼那些子程序将成為孤兒程序。孤兒程序将被init程序(程序号為1)所收養,并由init程序對它們完成狀态收集工作。

僵屍程序:一個已經終止、但是其父程序尚未對其進行善後處理的(擷取終止程序的有關資訊,釋放他仍占用的資源)的程序

二、僵屍程序和孤兒程序的危害

        unix提供了一種機制可以保證隻要父程序想知道子程序結束時的狀态資訊, 就可以得到。這種機制就是: 在每個程序退出的時候,核心釋放該程序所有的資源,包括打開的檔案,占用的記憶體等。 但是仍然為其保留一定的資訊(包括程序号the process ID,退出狀态the termination status of the process,運作時間the amount of CPU time taken by the process等)。直到父程序通過wait / waitpid來取時才釋放。 但這樣就導緻了問題,如果父程序不對已處于終止狀态的子程序的資訊進行處理,就會浪費大量的系統資源,

僵屍程序:由定義和上述可知,僵屍程序即父程序未對其終止狀态做善後處理的程序,占有一定的系統資源,如果産生大量的僵屍程序,就會造成系統資源枯竭(如:沒有可用的程序ID、檔案描述符)。

孤兒程序:孤兒程序是沒有父程序的程序,當一個程序成為孤兒程序時,它就會被init程序所收養,而init程序被編寫成無論何時隻要有一個子程序終止,init就會調用一個wait函數擷取其終止狀态,即防止了在系統中有很多僵死程序。

綜上:僵屍程序會對系統造成影響,而孤兒程序則不會

繼續閱讀