Laravel控制台命令从终端捕获信号

时间:2016-07-31 17:13:22

标签: php laravel console signals laravel-5.2

我试图在终端捕捉信号。我知道我可以使用pcntl_signal()功能,但它对我不起作用。

我正在尝试使用此代码:

public function handle() {
    pcntl_signal(SIGINT, function ($signo) {
        echo "CATCH!\n";
        exit;
    });

    while (true) { echo("!\n"); sleep(2); }
}

当我按Ctrl+C时,我看不到任何结果,因为程序仍在运行。我错了什么?

我想在按Ctrl+C后调用__destruct()方法停止播放节目。

1 个答案:

答案 0 :(得分:0)

pcntl_signal()功能在您的文件中没有此行的情况下无法正常工作:

declare(ticks = 1);

在类定义之前,它应该位于文件的顶部。

tick是在程序执行期间定期发生的事件,在这种情况下,每个tick会触发程序检查进来的信号。我想。我不知道为什么默认情况下没有启用它,可能是因为它在运行时CPU负载增加了?

我已经看到一些断言在PHP 5.3之后弃用了滴答声,但我刚刚在PHP 7.0.9中测试过并且可以确认pcntl_signal()在没有它的情况下不起作用。