php pcntl_fork exit不能退出子进程

新手上路,请多包涵

<?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);
按道理来说子进程已经exit了、但是查看进程的时候子进程还是存在的,按道理说最下面的while(1)只会在父进程执行。想了很长时间一直不理解,忘帮忙答疑

阅读 2.7k
1 个回答

进程exit不意味着程序消失
https://www.cnblogs.com/wucha...

任何一个子进程(init除外)在exit后并非马上就消失,而是留下一个称外僵尸进程的数据结构,等待父进程处理。这是每个子进程都必需经历的阶段。另外子进程退出的时候会向其父进程发送一个SIGCHLD信号。

需要父进程处理 SIGCHLD 信号,不然就会成僵尸进程,可以在父进程增加信号监听

pcntl_signal(SIGCHLD, SIG_IGN);

SIG_IGN 表示忽略信号(虽然是忽略,但是意味着父进程处理了该信号,内核就会释放该进程资源)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题