首页
下载
文档
社区
视频
捐赠
源代码
赞助商
AOT 编译器
AI 助理
商业产品
PHP AOT 原生编译器
Swoole-Compiler 代码加密器
CRMEB 新零售社交电商系统
登录
注册
全部
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
发表新帖
Process::signal 在mac下不能被触发
### 问题描述 Process::signal 在mac下不能被触发 版本 (base) ➜ swoole_learn git:(master) ✗ php7.4 --ri swoole swoole Swoole => enabled Author => Swoole Team <team@swoole.com> Version => 4.5.0-alpha Built => Apr 11 2020 13:29:02 coroutine => enabled kqueue => enabled (base) ➜ swoole_learn git:(master) ✗ php7.4 -v PHP 7.4.4 (cli) (built: Apr 6 2020 16:57:24) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies ### 问题出现的平台版本及自己尝试过哪些方法 mac: 10.15.3 ### 相关代码 ```php <?php use Swoole\Process; echo "当前进程ID:".posix_getpid().PHP_EOL; //获取进程ID; // cli_set_process_title("mymain"); // 设置了进程名称 $child1 = new Process(function (){ echo "当前子进程1的ID:".posix_getpid().PHP_EOL; //获取进程ID; //设置了进程名称 // cli_set_process_title(); while(true){ //写个死循环,不让进程退出 sleep(1); } }); $child1->start(); $child2 = new Process(function (){ echo "当前子进程2的ID:".posix_getpid().PHP_EOL; //获取进程ID; //设置了进程名称 // cli_set_process_title(); }); $child2->start(); // 原始的方法 否则在linux下会出现ppid=0 的孤儿进程 // mac 下会强制设置为ppid=1 整个系统的根节点的进程 Process::signal(SIGCHLD,function ($sig){ // 必须为false,非阻塞模式 // 这里根本就进不来啊... while($ret = Process::wait(false)){ echo "PID={$ret['pid']} \n"; var_dump($ret); } }); ``` ### 你期待的结果是什么?实际看到的错误信息又是什么? 进入38行( Process::signal(SIGCHLD,function ($sig){)代码
发布于6年前 · 0 次浏览 · 来自
提问
justingjm
### 问题描述 Process::signal 在mac下不能被触发 版本 (base) ➜ swoole_learn git:(master) ✗ php7.4 --ri swoole swoole Swoole => enabled Author => Swoole Team <team@swoole.com> Version => 4.5.0-alpha Built => Apr 11 2020 13:29:02 coroutine => enabled kqueue => enabled (base) ➜ swoole_learn git:(master) ✗ php7.4 -v PHP 7.4.4 (cli) (built: Apr 6 2020 16:57:24) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies ### 问题出现的平台版本及自己尝试过哪些方法 mac: 10.15.3 ### 相关代码 ```php <?php use Swoole\Process; echo "当前进程ID:".posix_getpid().PHP_EOL; //获取进程ID; // cli_set_process_title("mymain"); // 设置了进程名称 $child1 = new Process(function (){ echo "当前子进程1的ID:".posix_getpid().PHP_EOL; //获取进程ID; //设置了进程名称 // cli_set_process_title(); while(true){ //写个死循环,不让进程退出 sleep(1); } }); $child1->start(); $child2 = new Process(function (){ echo "当前子进程2的ID:".posix_getpid().PHP_EOL; //获取进程ID; //设置了进程名称 // cli_set_process_title(); }); $child2->start(); // 原始的方法 否则在linux下会出现ppid=0 的孤儿进程 // mac 下会强制设置为ppid=1 整个系统的根节点的进程 Process::signal(SIGCHLD,function ($sig){ // 必须为false,非阻塞模式 // 这里根本就进不来啊... while($ret = Process::wait(false)){ echo "PID={$ret['pid']} \n"; var_dump($ret); } }); ``` ### 你期待的结果是什么?实际看到的错误信息又是什么? 进入38行( Process::signal(SIGCHLD,function ($sig){)代码
赞
0
收藏
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
登录
后参与评论
评论
2020-04-15
Rango
你的主进程没有任何事件,只有信号监听,所以主进程会直接退出。 你可以添加一些异步逻辑,比如设置一个空的定时器。 ```php Swoole\Process::signal(SIGINT, function () { echo "INT\n"; }); Swoole\Timer::tick(5000, function () { }); Swoole\Event::wait(); ```
赞
0
回复
2020-05-05
justingjm
谢谢,Rango老师,原来是还没有触发监听事件,就退出了! 问题已解决
赞
0
回复