我试着参考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版本有问题?
经过排查,是php安装了
grpc
这个扩展删除这个扩展就没有问题了