为了账号安全,请及时绑定邮箱和手机立即绑定

php pcntl_fork 子进程exit退出问题

php pcntl_fork 子进程exit退出问题

PHP
翻阅古今 2019-03-07 23:54:19
父进程使用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);
?>
查看完整回答
反对 回复 2019-03-18
  • 2 回答
  • 0 关注
  • 1469 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信