猿问

swoole process子进程fatal,父进程监听不到SIGCHLD信号?

cli模式下用process多进程。
master进程通过SIGCHLD监听子进程退出并重启子进程。

    swoole_process::signal(SIGCHLD, function(){        // 子进程退出
        while ($ret = swoole_process::wait(false)) {            unset(self::$wokers[$ret['pid']]);            self::logError('SIGNAL-WORKER_EXIT-%s', $ret['pid']);            //重新创建
            self::initProcess();
        }
    });

直接kill掉子进程,父进程能够接受到信号并重新拉起子进程。

但子进程发生fatal的情况下,父进程接收不到子进程退出的信号,同时子进程会成为僵尸进程。

[php] <defunct>

想问下各位大佬有没有遇到这种情况的?pcntl实现的时候,子进程fatal的时候,父进程是会受到SIGCHLD的。


慕妹3146593
浏览 407回答 1
1回答

慕桂英4014372

这种情况的主要原因可能是你的父进程逻辑存在问题,swoole_process::signal是异步信号处理,你的程序要是完全异步非阻塞的。如果你父进程代码是while(true)死循环、同步阻塞的,这里没有机会执行到。
随时随地看视频慕课网APP
我要回答