请教 `Swoole\Process::signal` 执行前如果有协程产生就失效

请教 Swoole\Process::signal 执行前如果有协程产生就不起作用, 这是什么逻辑, 怎么解释?

Swoole version: 4.3.3

代码:

use Swoole\Process;

Swoole\Runtime::enableCoroutine();

echo "kill " . getmypid(), "\n";

go(function() {

    sleep(1); // 注释这行, 以下 Process::signal 正常工作

    Process::signal(SIGINT, function($signo) {
        echo "SIGINT.\n";
        \Swoole\Event::exit();
    });
    Process::signal(SIGTERM, function($signo) {
        echo "shutdown.\n";
        exit;
    });

    go(function() {
        for($i=1;$i<20;$i++){
            echo date('H:i:s'), "\n";
            sleep(1);
        }
    });
});

执行sleep(1) 结果:

root@ubuntu:/# php test.php
kill 16279
14:21:42
14:21:43
14:21:44
^C
root@ubuntu:/#

注释sleep(1) 结果:

root@ubuntu:/# php test.php
kill 16328
14:21:50
14:21:51
14:21:52
^CSIGINT.
root@ubuntu:/#
阅读 2.4k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题