我是新手使用pcntl_fork。 这是我的代码:
<?php
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_wait($status);
}
}
?>
3进程不会同时回显。 似乎第二个孩子等待第一个孩子,依此类推。 如何让3个流程并行工作?
答案 0 :(得分:0)
我的朋友解决了这个问题。等待前一个子进程的子进程是由第11行引起的:
pcntl_wait($status);
它会导致父级等待上一个进程,然后在第一个进程结束时启动下一个进程。
这是正确的代码:
$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);
}
}