父进程使用while(1) 挂起进程,子进程中用到了exit(1) 但是最终ps -ef |grep php 发现子进程并没有退出,是什么原因造成这个问题的,正常来说子进程不是应该会退出吗?
<?php
for($i=0;$i<10;$i++){
fork_worker();
}
function fork_worker(){
$pid = pcntl_fork();
if($pid == 0){ //child processes
echo "子进程\r\n";
$this_id = getmypid();
echo $this_id."\r\n";
exit(1);
}elseif($pid > 0){ //master processes
echo "父进程\r\n";
}
}
while(1);
?>
忘答疑解惑
2 回答
长风秋雁
TA贡献1757条经验 获得超7个赞
父进程没有调用 wait
的情况下,子进程会成为僵尸进程,不会被回收。
<?php
$id = [];
for($i=0;$i<10;$i++){
$id[] = fork_worker();
}
function fork_worker(){
$pid = pcntl_fork();
if($pid == 0){ //child processes
echo "子进程\r\n";
$this_id = getmypid();
echo $this_id."\r\n";
exit(1);
}elseif($pid > 0){ //master processes
echo "父进程\r\n";
return $pid;
}
}
foreach($id as $i) {
pcntl_wait($i);
}
while(1);
?>
- 2 回答
- 0 关注
- 1469 浏览
添加回答
举报
0/150
提交
取消