父進程使用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 關注
- 1500 瀏覽
添加回答
舉報
0/150
提交
取消