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

发布于 2022-09-05 09:09:56 字数 519 浏览 13 评论 0

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开发

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

樱花坊 2022-09-12 09:09:56
swoole_process::signal(SIGCHLD, function(){
        //表示子进程已关闭,回收它
        while($ret =  swoole_process::wait(false)) {
        //拉起一个子进程
        }
})

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文