我試著參考workerman的多進(jìn)程編程思想,手動寫一個簡單的多進(jìn)程處理,但是遇到了很奇怪的問題。
pcntl_wait()一直等不到子進(jìn)程退出消息,造成父進(jìn)程卡住一直不退出。謝謝大佬給指點一下。
php版本:PHP 7.2.34 (cli) (built: Oct 1 2020 13:37:37) ( NTS )
<?php
//fork一個子進(jìn)程
$processIds = [];
$i = 0;
$processIds[$i] = pcntl_fork();
switch ($processIds[$i]) {
case -1:
echo 'fork failed!';
exit;
case 0:
//子進(jìn)程處理
echo "子進(jìn)程:" . posix_getpid();
exit;
default:
echo "父進(jìn)程:" . posix_getpid();
break;
}
// 父進(jìn)程執(zhí)行到這里就一直卡住,一直收不到子進(jìn)程的退出
pcntl_wait($status);
//while (count($processIds) > 0) {
// // 阻塞等待任意子進(jìn)程,與pcntl_wait
// //$myPid = pcntl_waitpid(-1, $status, WNOHANG);
//
// foreach ($processIds as $key => $pid) {
// if ($myPid == $pid || $myPid == -1) {
// unset($processIds[$key]);
// }
// }
//}
// 這里始終執(zhí)行不到
echo "父進(jìn)程退出";
輸出如下
[root@telrobot-test-server-0002 ~]# php demo.php
父進(jìn)程:29078子進(jìn)程:29082
執(zhí)行后進(jìn)程情況:
我找了很多資料,很多方法,這個腳本是沒有問題的啊。為什么父進(jìn)程不能執(zhí)行完畢。難道是我pcntl擴(kuò)展有問題,或者是php版本有問題?