孤兒程序與殭屍程序 二

2021-06-01 20:29:05 字數 722 閱讀 6388

在unix 系統中,乙個子程序結束了,但是他的父程序沒有等待(呼叫wait / waitpid)他, 那麼這個子程序將變成乙個殭屍程序。 但是如果該程序的父程序已經先結束了,那麼該程序就不會變成殭屍程序, 因為每個程序結束的時候,系統都會掃瞄當前系統中所執行的所有程序, 看有沒有哪個程序是剛剛結束的這個程序的子程序,如果是的話,就由init (程序號為1)來接管他,成為他的父程序,此時稱這個程序為孤兒程序,其狀態收集工作由init程序負責。

以下是殭屍程序的示例程式,在此程式中,父程序讓子程序退出但不處理,然後父程序呼叫system函式列出當前前台程序資訊,其源**如下:

#include 

#include 

#include 

main()  

sleep(3);

system("ps");

exit(0)

}  以上程式的編譯執行結果為:

child_pid pid=1108

pid   tty   time      cmd

847   pts/1 00:00:00  bash

1107 pts/1 00:00:00  a.out

1108 pts/1 00:00:00 a.out

1109 pts/1 00:00:00 ps

殭屍程序與孤兒程序

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

殭屍程序與孤兒程序

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

殭屍程序與孤兒程序

在父程序執行wait 之前,其子程序就已終止,即使子程序終止,系統也允許父程序在以後的某個時刻去執行wait 以確定子程序是如何終止。核心通過將子程序轉為殭屍程序,以釋放其占用的系統資源,供其他程序使用,該程序唯一保留的是系統pcb中的一條記錄,其中包含了子程序的id,終止狀態,和資源使用的資料。當...