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的。
1 回答
![?](http://img1.sycdn.imooc.com/545868190001d52602200220-100-100.jpg)
慕桂英4014372
TA贡献1871条经验 获得超13个赞
这种情况的主要原因可能是你的父进程逻辑存在问题,swoole_process::signal
是异步信号处理,你的程序要是完全异步非阻塞的。如果你父进程代码是while(true)
死循环、同步阻塞的,这里没有机会执行到。
- 1 回答
- 0 关注
- 406 浏览
添加回答
举报
0/150
提交
取消