PHP多程序中如何防止僵死程序

2021-06-01 22:47:43 字數 866 閱讀 4256

根據《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 呼叫的時候使用。子程序先於父程序結束,父程序沒有獲...