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));
}
備註:本文就是爲了給自己做下記錄,如有不恰當之處,請各路大牛指出,好讓後輩們學習。