猿问

php pcntl_fork 子进程exit退出问题

父进程使用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);
?>

忘答疑解惑

翻阅古今
浏览 1470回答 2
2回答

长风秋雁

父进程没有调用 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); ?>
随时随地看视频慕课网APP
我要回答