殭屍程序:乙個子程序死亡了,但是它的父程序並沒有呼叫wait或waitpid進行狀態收集,關於這個程序的描述符還存在系統中,這個子程序就死不瞑目,就成了殭屍程序。
孤兒程序:顧名思義,就是沒有父程序的程序。在os中,乙個父程序死亡,它的那些還在執行的子程序就成為孤兒程序。孤兒程序會被init程序(pid=1)所收養,並且由init程序完成它們的狀態收集工作。
需要了解的是,在os中,每個程序都有乙個關於本身的程序描述符,當這個程序消亡之後,這個描述符是不會消失的,這個描述符是父程序用來檢視子程序的唯一標示。只有父程序呼叫wait或者waitpid對子程序進行狀態收集,子程序才不會變成殭屍程序。
孤兒程序本身並沒有什麼危害,其父程序死亡,init會負責它的善後事宜,收集它的狀態描述符,並不會對系統造成危害。殭屍程序就不一樣了,殭屍程序已經死亡,但是描述符一直存在,會占用系統資源,如果乙個系統存在大量的殭屍程序的話,大量無用的狀態描述符會大量消耗系統空間和資源。我們就需要分析,怎樣解決殭屍程序的問題。究其原因,還是因為其父程序,如果父程序消亡的話,殭屍程序就會變成孤兒程序,則其狀態描述就可以有init來收集了,若其父程序並沒有消亡,而是一直在製造殭屍程序,那就是很恐怖的事情了。所以這個問題最有效的辦法就是找出殭屍程序的父程序,殺死它。當然,正確呼叫wait或者waitpid就更好了^_^。
殭屍程序和孤兒程序
殭屍程序 乙個子程序在其父程序還沒有呼叫wait 或waitpid 的情況下退出。這個子程序就是殭屍程序。孤兒程序 乙個父程序退出,而它的乙個或多個子程序還在執行,那麼那些子程序將成為孤兒程序。孤兒程序將被init程序 程序號為1 所收養,並由init程序對它們完成狀態收集工作。殭屍程序將會導致資源...
殭屍程序和孤兒程序
什麼是殭屍程序?乙個子程序在其父程序沒有呼叫wait 或waitpid 的情況下退出。這個子程序就是殭屍程序。如果其父程序還存在而一直不呼叫wait,則該殭屍程序將無法 等到父程序結束後,會被init 驗證 include include includeint main 3秒後查詢其程序資訊 通過上...
殭屍程序和孤兒程序
殭屍程序和孤兒程序 在unix系統程式設計中,常常會碰到兩個概念 僵死程序和孤兒程序 僵死程序 在unix程序模型中,程序是按照父程序產生子程序,子程序產生子子程序這樣的方式建立出完成各項相互協作功能的程序的。當乙個程序完成它的工作終止之後,它的父程序需要呼叫wait 或者waitpid 系統呼叫取...