Я пытаюсь поймать сигналы в терминале. Я знаю, что я могу использовать 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()
метод.
pcntl_signal()
функция не будет работать без этой строки в вашем файле:
declare(ticks = 1);
Вероятно, оно должно быть вверху файла, перед определением класса.
поставить галочку это событие, которое происходит регулярно во время выполнения программы, и в этом случае каждый тик запускает программу для проверки поступающих сигналов. Я думаю. Я не знаю, почему он не включен по умолчанию, возможно, из-за увеличения загрузки процессора во время работы?
Я видел несколько утверждений о том, что тики устарели после PHP 5.3, но я только что протестировал в PHP 7.0.9 и могу подтвердить, что pcntl_signal()
не работает без этого.
Других решений пока нет …