pcntl_wait($status)一直获取不到子进程退出状态,造成父进程一直卡住。

xiaopi

问题描述

我试着参考workerman的多进程编程思想,手动写一个简单的多进程处理,但是遇到了很奇怪的问题。
pcntl_wait()一直等不到子进程退出消息,造成父进程卡住一直不退出。谢谢大佬给指点一下。

php版本:PHP 7.2.34 (cli) (built: Oct 1 2020 13:37:37) ( NTS )

<?php
 //fork一个子进程
$processIds = [];
$i = 0;
$processIds[$i] = pcntl_fork();
switch ($processIds[$i]) {
    case -1:
        echo 'fork failed!';
        exit;
    case 0:
        //子进程处理

        echo "子进程:" . posix_getpid();
        exit;
    default:
        echo "父进程:" . posix_getpid();
        break;
}

// 父进程执行到这里就一直卡住,一直收不到子进程的退出
pcntl_wait($status);
//while (count($processIds) > 0) {
//    // 阻塞等待任意子进程,与pcntl_wait
//    //$myPid = pcntl_waitpid(-1, $status, WNOHANG);
//
//    foreach ($processIds as $key => $pid) {
//        if ($myPid == $pid || $myPid == -1) {
//            unset($processIds[$key]);
//        }
//    }
//}

// 这里始终执行不到
echo "父进程退出";

输出如下

[root@telrobot-test-server-0002 ~]# php demo.php
父进程:29078子进程:29082

执行后进程情况:
截图

我找了很多资料,很多方法,这个脚本是没有问题的啊。为什么父进程不能执行完毕。难道是我pcntl扩展有问题,或者是php版本有问题?

649 1 0
1个回答

xiaopi

经过排查,是php安装了grpc这个扩展
删除这个扩展就没有问题了

  • 暂无评论
年代过于久远,无法发表回答
🔝