根據《unix環境高階程式設計》中的定義,僵死程序指的是:乙個已經終止、但是其父程序尚未對其進行善後處理(獲取終止子程序的有關資訊,釋放它仍占用的資源)的程序被稱為僵死程序(zombie)。
一旦某個程序fork了很多子程序,那麼除非父程序等待取得子程序的終止狀態,否則這些子程序終止後就會變成僵死程序。
現在可以利用在fork子程式時進行兩次fork,把第一次fork的子程式退出,由於父程式對第乙個子程式進行了wait,第乙個子程式退出後就會傳送乙個wnohang的訊號,父程序退出,然後第二個子程序就變成了init程序的子程序了,init程序會對所有的子程序進行管理!
下面的**演示了上面所述的過程:
$start=time();
$pid=pcntl_fork();
if($pid<0)elseif ($pid==0)
else if($pidsecond>0)//第二個子程序的父程序,第乙個子程序
//下面是第二個子程序執行部分
else if ($pidsecond==0)
}if(pcntl_waitpid($pid,$status)!=$pid)//wait 第乙個子程序,父程序阻塞
$end=time();
$used=$end-$start;
echo "used seconds:".$used."\n";
echo "parent pid:".posix_getpid()."\n";
exit();
執行上面的**會看出有兩個程序輸出,父程序列印執行時間,第二個子程序列印父程序(父程序是init程序)的程序號碼(結果是1)。 php多程序防止出現殭屍程序
對於用php進行多程序併發程式設計,不可避免要遇到殭屍程序的問題。殭屍程序是指的父程序已經退出,而該程序dead之後沒有程序接受,就成為殭屍程序 zombie 程序。任何程序在退出前 使用exit退出 都會變成殭屍程序 用於儲存程序的狀態等資訊 然後由init程序接管。如果不及時 殭屍程序,那麼它在...
如何檢視僵死程序
這些程序已經死亡,但沒有釋放系統資源,包括記憶體和一些一些系統表等,如果這樣的程序很多,會引發系統問題。用ps el看出的程序狀態如果是z,就是殭屍程序。ps ef grep defunc可以找出殭屍程序.有些zombie程序時用kill 9也不能殺死,而且消耗了很多系統資源不能釋放,如果系統在sh...
Linux中僵死程序
僵死程序 殭屍程序 一 僵死程序產生的原因 用fork建立程序,子程序終止時,它與父程序之間還會保持聯絡,知道父程序也正常終止或者父程序呼叫 wait 才結束,所以程序表中子程序的表項不會立即釋放,因為它的退出碼還需要儲存起來,以備父程序 wait 呼叫的時候使用。子程序先於父程序結束,父程序沒有獲...