当前位置: 首页>业内资讯>客服技术

Gatewayworker和workman停止失败的原因和处理办法

        Workerman或gatewayworker是一款开源高性能异步PHP socket即时通讯框架。支持高并发,超高稳定性,被广泛的用于手机app、移动通讯,微信小程序,手游服务端、网络游戏、PHP聊天室、硬件通讯、智能家居、车联网、物联网等领域的开发。 支持TCP长连接,支持Websocket、HTTP等协议,支持自定义协议。拥有异步Mysql、异步Redis、异步Http、MQTT物联网客户端、异步消息队列等众多高性能组件。

        停止失败的原因一般有四种,下面我就一一列举一下!

        第一种可能性:
前提是以debug方式启动的workerman,开发者在终端按了ctrl z给workerman发送了SIGSTOP信号,导致workerman进入后台并挂起(暂停),所以无法响应stop命令(SIGINT信号)。

        解决:
在启动workerman的终端输入fg(发送SIGCONT信号)然后回车,将workerman切回前台运行,按ctrl c(发送SIGINT信号)停止workerman。

如果无法停止,尝试运行以下两条命令

killall -9 php
ps aux|grep -i workerman|awk '{print $2}'|xargs kill -9

        第二种可能性:
运行stop的用户和workerman启动用户不一致,即stop用户没有权限停止workerman。
        解决:
切换到启动workerman的用户,或者用权限更高的用户停止workerman。


        第三种可能性:
保存workerman主进程pid文件被删除,导致脚本找不到pid进程,导致停止失败。
        解决:
将pid文件保存到安全的位置。


        第四种可能性:
workerman主进程pid文件对应的进程不是workerman进程。

        解决:
打开workerman的主进程的pid文件查看主进程pid,pid文件默认在Workerman平行的目录里。运行命令 ps aux | grep 主进程pid 查看对应的进程是否是Workerman进程,如果不是,可能是服务器重启过,导致workerman保存的pid是过期的pid,而这个pid刚好被其它进程使用,导致停止失败。如果是这种情况,将pid文件删除即可。


嘿,我来帮您!

微信公众号