为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
隔江千里 2019-03-07 16:47:39
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的。
查看完整描述

2 回答

?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

这种情况的主要原因可能是你的父进程逻辑存在问题,swoole_process::signal是异步信号处理,你的程序要是完全异步非阻塞的。

查看完整回答
反对 回复 2019-03-07
?
慕码人2483693

TA贡献1860条经验 获得超9个赞

如果你父进程代码是while(true)死循环、同步阻塞的,这里没有机会执行到。

查看完整回答
反对 回复 2019-03-07
  • 2 回答
  • 0 关注
  • 1080 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信