首页
下载
文档
社区
视频
捐赠
源代码
赞助商
AOT 编译器
AI 助理
商业产品
PHP AOT 原生编译器
Swoole-Compiler 代码加密器
CRMEB 新零售社交电商系统
登录
注册
全部
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
发表新帖
swoole_process::signal(SIGCHLD,functiob(){});与Process::kill(进程ID,0)均得不到响应
### 问题描述 swoole_process::signal(SIGCHLD,functiob(){});与Process::kill(进程ID,0)均得不到响应! 之前看到说是主进程一直while不能收到,但这样的逻辑要怎么好? 主进程是通过:addProcess方式启动 ### Swoole 版本,PHP版本,以及操作系统版本信息 Swoole 4.5 php 7.3.14 ### 相关代码 ```php $childProcess=new Swoole_process(function($pro){ while(true){sleep(1);} }); $childProcess->start(); Coroutine::create(function(){ \swoole_process::signal(SIGCHLD, static function ($sig) { //这里会一直循环执行:fase为非阻塞 while ($ret=\swoole_process::wait(false)) { } }); }); while(true) { if(Process::kill($childProcess->getPid(),0)) { 重启子进程 } sleep(1); } ``` ### 你期待的结果是什么?实际看到的错误信息又是什么?
发布于6年前 · 1 次浏览 · 来自
提问
Y js
### 问题描述 swoole_process::signal(SIGCHLD,functiob(){});与Process::kill(进程ID,0)均得不到响应! 之前看到说是主进程一直while不能收到,但这样的逻辑要怎么好? 主进程是通过:addProcess方式启动 ### Swoole 版本,PHP版本,以及操作系统版本信息 Swoole 4.5 php 7.3.14 ### 相关代码 ```php $childProcess=new Swoole_process(function($pro){ while(true){sleep(1);} }); $childProcess->start(); Coroutine::create(function(){ \swoole_process::signal(SIGCHLD, static function ($sig) { //这里会一直循环执行:fase为非阻塞 while ($ret=\swoole_process::wait(false)) { } }); }); while(true) { if(Process::kill($childProcess->getPid(),0)) { 重启子进程 } sleep(1); } ``` ### 你期待的结果是什么?实际看到的错误信息又是什么?
赞
0
收藏
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
登录
后参与评论
评论
2020-05-09
鲁飞
1. 不要自己造方法。process没有这个`getPid`方法。 2. 你对linux信号、协程和process没理解。 `kill -0 pid`不发送任何信号,但是系统会进行错误检查。 协程那里就不会走,你自己在这三个地方加上输出kill就知道了 。
赞
1
回复
2020-05-09
Y js
回复
鲁飞
这个找到原因了,就是好个一直whild(true)导致的,把这个处理掉就好! 但是我是没明白,如果不加这个消息循环的话,那这个进程不会退出吗?现现在只是创建了多个子进程在等信号量,但如都回收了,那这个主进程不也就退出了吗?所以没明白这个地方 不好意思上面的方法getPid是自己写的!
赞
0
回复