[請益] pcntl_fork 的結果跟預期的不同
先上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
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
12/01 17:32, 3F
推
12/01 18:33, , 4F
12/01 18:33, 4F
→
12/01 19:21, , 5F
12/01 19:21, 5F
推
12/01 22:15, , 6F
12/01 22:15, 6F
推
12/02 10:02, , 7F
12/02 10:02, 7F
→
12/02 10:02, , 8F
12/02 10:02, 8F
→
12/02 10:03, , 9F
12/02 10:03, 9F
→
12/02 10:03, , 10F
12/02 10:03, 10F
→
12/02 10:04, , 11F
12/02 10:04, 11F