我试图在终端捕捉信号。我知道我可以使用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()
方法停止播放节目。
答案 0 :(得分:0)
pcntl_signal()
功能在您的文件中没有此行的情况下无法正常工作:
declare(ticks = 1);
在类定义之前,它应该位于文件的顶部。
tick是在程序执行期间定期发生的事件,在这种情况下,每个tick会触发程序检查进来的信号。我想。我不知道为什么默认情况下没有启用它,可能是因为它在运行时CPU负载增加了?
我已经看到一些断言在PHP 5.3之后弃用了滴答声,但我刚刚在PHP 7.0.9中测试过并且可以确认pcntl_signal()
在没有它的情况下不起作用。