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的。

阅读 3.1k
1 个回答

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题