0

请教 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:/#
moln 72
2019-06-13 提问
0 个回答

撰写答案

推广链接