首页
下载
文档
社区
视频
捐赠
源代码
赞助商
AOT 编译器
AI 助理
商业产品
PHP AOT 原生编译器
Swoole-Compiler 代码加密器
CRMEB 新零售社交电商系统
登录
注册
全部
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
发表新帖
swoole_process SIGCHLD信号
{{{ <?php $workers = []; for ($i = 0; $i < 10; $i++) { $worker = new swoole_process(function() use ($i){ swoole_timer_tick(3000, function() use ($i) { echo 'working ' . $i . PHP_EOL; }); }, false); $worker->start(); $workers[$worker->pid] = $worker; } foreach($workers as $process){ swoole_event_add($process->pipe, function ($pipe) use($process){ $data = $process->read(); echo "RECV: " . $data . PHP_EOL; }); } swoole_process::signal(SIGCHLD, function($sig) use ($workers) { // 不能执行到 while ($ret = swoole_process::wait(false)) { echo "PID={$ret['pid']}\n"; unset($workers[$ret['pid']]); } }); swoole_process::signal(SIGTERM, function($sig){ var_dump($sig); // 执行到 }); }}} kill -15 主进程id 可以执行到 SIGTERM信号的 回调... 但是 SIGCHLD 回调 执行不到.... 这样会产生很多僵尸进程 ?..求解 可能是哪方面原因呢.,.. 多谢~~
发布于9年前 · 1 次浏览 · 来自
提问
冷
冷咖啡
{{{ <?php $workers = []; for ($i = 0; $i < 10; $i++) { $worker = new swoole_process(function() use ($i){ swoole_timer_tick(3000, function() use ($i) { echo 'working ' . $i . PHP_EOL; }); }, false); $worker->start(); $workers[$worker->pid] = $worker; } foreach($workers as $process){ swoole_event_add($process->pipe, function ($pipe) use($process){ $data = $process->read(); echo "RECV: " . $data . PHP_EOL; }); } swoole_process::signal(SIGCHLD, function($sig) use ($workers) { // 不能执行到 while ($ret = swoole_process::wait(false)) { echo "PID={$ret['pid']}\n"; unset($workers[$ret['pid']]); } }); swoole_process::signal(SIGTERM, function($sig){ var_dump($sig); // 执行到 }); }}} kill -15 主进程id 可以执行到 SIGTERM信号的 回调... 但是 SIGCHLD 回调 执行不到.... 这样会产生很多僵尸进程 ?..求解 可能是哪方面原因呢.,.. 多谢~~
赞
0
收藏
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
登录
后参与评论
评论
2017-04-28
f
ffthy
SIGCHLD是子进程退出时触发的,你可以kill任意一个子进程,看看主进程会不会触发SIGCHLD
赞
0
回复
2020-05-08
Y js
回复
ffthy
最新的4.5也这样KILL掉子进程也是收不到,不知道原因
赞
0
回复
2018-02-22
H
Hardy
我也遇到同样的问题,求解决方案!!!!!
赞
0
回复