swoole2.0使用swoole_process做多进程出现问题

新手上路,请多包涵

swoole版本:2.0
使用swoole_process来创建子进程
多进程模型是一个主进程监听四个子进程
主进程使用swoole_timer_tick()来执行定时任务
每200毫秒用swoole_process::wait(false)来检查是否有子进程退出
如果code不为0,则为异常退出,会重启一个子进程

在子进程中用register_shutdown_function来捕捉致命错误,记录一个错误日志

问题是
当进程第一次启动后,子进程出现致命错误,触发了register_shutdown_function中注册的函数来处理
当子进程退出,主进程wait回收后,又启动了一个子进程
再次启动的子进程,再次出现致命错误的时候,没有触发register_shutdow_function中注册的函数(确定执行了注册代码)

使用swoole_errno()在主进程来获取错误码,第一次错误码为2(正常的)
子进程重启后,触发的错误码为115

项目为一个多进程的异步任务管理器,集成lumen5.3开发

阅读 4.6k
1 个回答
swoole_process::signal(SIGCHLD, function(){
        //表示子进程已关闭,回收它
        while($ret =  swoole_process::wait(false)) {
        //拉起一个子进程
        }
})

可以使用上面监听SIGCHLD信号这种方式去回收子进程,

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