孤兒程序與殭屍程序的區別以及殭屍程序的解決方案

2022-06-09 20:24:09 字數 504 閱讀 7775

正常情況下,子程序由父程序建立,父子程序是乙個非同步過程,子程序結束之後父程序一般會呼叫wait()或者waitpid()取得子程序的終止狀態,然後**子程序的資源。

孤兒程序: 父程序結束了,但是他的乙個或者多個子程序還在執行,那麼這些子程序就變成了孤兒程序(father died).子程序的資源由init程序(程序號pid = 1)**。

殭屍程序:子程序退出了,但是父程序沒有呼叫wait() 或者waitpid() 去獲取子程序的狀態資訊,那麼子程序的程序描述符仍然儲存在系統中,這種程序稱為殭屍程序。

系統所能使用的程序號是有限的,如果大量差生殭屍程序,將因為沒有可用的程序號,導致無法產生新的程序,這就是殭屍程序的危害。孤兒程序是沒有父程序,init 程序充當父程序,因此孤兒程序並沒有什麼危害。

任何乙個子程序(init除外)在exit()之後,並非馬上就消失掉,而是留下乙個成為殭屍程序的資料結構,等待父程序去處理。如果父程序在子程序exit()之後,沒有及時處理,出現了殭屍程序,並可以用ps命令去檢視,它的狀態是「z」

孤兒程序以及殭屍程序總結

我們知道在unix linux中,正常情況下,子程序是通過父程序建立的,子程序在建立新的程序。子程序的結束和父程序的執行是乙個非同步過程,即父程序永遠無法 子程序 到底什麼時候結束。當乙個 程序完成它的工作終止之後,它的父程序需要呼叫wait 或者waitpid 系統呼叫取得子程序的終止狀態。孤兒程...

殭屍程序與孤兒程序

殭屍程序 如果乙個程序通過fork 建立子了乙個程序,當子程序退出而父程序還沒有呼叫wait waitpid來儲存子程序的狀態且 它,此時子程序的狀態描述資訊仍然保留在系統中,稱這類程序為殭屍程序 殭屍程序的優點是方便上層程序得知子程序的退出狀態,但是如果不及時 會造成記憶體洩露 孤兒程序 當乙個父...

殭屍程序與孤兒程序

孤兒程序是指在程序還未退出之前它的父程序就已經先退出了,簡單來說就是乙個沒有父程序的子程序就是孤兒程序。既然所有的程序都必須在退出之後被父程序的wait 或waitpid 以釋放其遺留在系統中的一些資源,那麼孤兒程序的這些東西又誰來處理呢?這個任務就落到了init程序的身上,init程序就好像乙個收...