看板 PHP 關於我們 聯絡資訊
先上code: for($i = 0; $i < 3 ; $i++){ $pid = pcntl_fork(); if($pid == -1){ echo "error\n"; }elseif($pid == 0){ echo "child(".getmypid().")\n"; sleep(3); exit(); }else{ pcntl_waitpid($pid, $status); } } 我本來預期三個children應該幾乎同時印出訊息 結果卻是第一個印完等三秒第二個才印,依此類推 請問這是哪裡誤會了? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.115.115.120 ※ 文章網址: https://www.ptt.cc/bbs/PHP/M.1480581423.A.B79.html
p52189: 我是原PO,這個問題我朋友幫我解了,只要把 pcntl_waitpid 12/01 17:11
p52189: 移出去就可以了 12/01 17:11
符合預期的版本,程式碼如下: $pidList = array(); for($i = 0; $i < 3 ; $i++){ $pid = pcntl_fork(); if($pid == -1){ echo "error\n"; }elseif($pid == 0){ echo "child(".getmypid().")\n"; sleep(3); exit(); }else{ array_push($pidList, $pid); } } if($pid != 0){ foreach($pidList as $pid){ pcntl_waitpid($pid, $status); } } ※ 編輯: p52189 (59.115.115.120), 12/01/2016 17:11:52 ※ 編輯: p52189 (59.115.115.120), 12/01/2016 17:14:51 ※ 編輯: p52189 (59.115.115.120), 12/01/2016 17:19:01 ※ 編輯: p52189 (59.115.115.120), 12/01/2016 17:20:02
Jerr: 有 fork 給推 12/01 17:32
shadowjohn: 好thread.php不用嗎 12/01 18:33
p52189: 不能用,伺服器不能動不然我也QQ 12/01 19:21
gpmm: 好巧,我今天也才正好在寫 pcntl_fork XDD 12/01 22:15
shadowjohn: 雖然是2009年的東西,但相當實用...也是pcntl :) 12/02 10:02
shadowjohn: 輕易就可以改出幾種常用的方法 12/02 10:03
shadowjohn: 10份工作給三個人作,一定要三個人完成才領下一組 12/02 10:03
shadowjohn: 或先作完的領下一組繼續,直到所有工作完成一起結束 12/02 10:04