[請益] pcntl_fork 的結果跟預期的不同

看板PHP作者 (鼠霸)時間7年前 (2016/12/01 16:37), 7年前編輯推噓4(407)
留言11則, 4人參與, 最新討論串1/1
先上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

12/01 17:11, , 1F
我是原PO,這個問題我朋友幫我解了,只要把 pcntl_waitpid
12/01 17:11, 1F

12/01 17:11, , 2F
移出去就可以了
12/01 17:11, 2F
符合預期的版本,程式碼如下: $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

12/01 17:32, , 3F
有 fork 給推
12/01 17:32, 3F

12/01 18:33, , 4F
好thread.php不用嗎
12/01 18:33, 4F

12/01 19:21, , 5F
不能用,伺服器不能動不然我也QQ
12/01 19:21, 5F

12/01 22:15, , 6F
好巧,我今天也才正好在寫 pcntl_fork XDD
12/01 22:15, 6F

12/02 10:02, , 8F
雖然是2009年的東西,但相當實用...也是pcntl :)
12/02 10:02, 8F

12/02 10:03, , 9F
輕易就可以改出幾種常用的方法
12/02 10:03, 9F

12/02 10:03, , 10F
10份工作給三個人作,一定要三個人完成才領下一組
12/02 10:03, 10F

12/02 10:04, , 11F
或先作完的領下一組繼續,直到所有工作完成一起結束
12/02 10:04, 11F
文章代碼(AID): #1OF-4ljv (PHP)