php多進程學習

php多進程學習

需要擴展:pcntl庫

基礎知識:進程運行,多進程並行

 

具體函數可以看參考:http://php.net/manual/zh/book.pcntl.php

 

下面直接給出栗子。

 該栗子純粹爲了用於理解多進程並行而寫,cli下運行,仔細研究和分析輸出結果。

<?php

$arr = array();

for($i = 0;$i<=1;$i++)

{

 echo $i."\n";

 $pid = pcntl_fork();//當前進程下,創建一個子進程。

 echo getmypid().'_'.$pid.'_'.$i."\n";

 $arr[$i] = $pid;

 if($pid == -1){

   //執行失敗返回-1,這裏敲對應的交互代碼

//do something

 }else if($pid){

   //父進程執行返回子進程id

   //父進程邏輯代碼

   //do something

 }else{

   //子進程執行返回0

   //子進程邏輯代碼

//do something

    die;   //這裏的die很重要,如果不die,部分自進程繼續循環會繼續創建更多子進程(孫進程)。

  }

}

var_dump($arr);

echo "\n\n";

foreach($arr as $k=>$v)

{

 var_dump(pcntl_waitpid($v,$s,WUNTRACED)); //這裏是對殭屍進程的回收和銷燬

//這裏是爲了測試部分函數,僅此而已。

 var_dump(pcntl_wifexited($s));

 var_dump(pcntl_wexitstatus($s));

 var_dump(pcntl_wifsignaled($s));

 var_dump(pcntl_wifstopped($s));

}


備註:本文就是爲了給自己做下記錄,如有不恰當之處,請各路大牛指出,好讓後輩們學習。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章