Командная команда Laravel получает сигнал от терминала

Я пытаюсь поймать сигналы в терминале. Я знаю, что я могу использовать 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

Решение

pcntl_signal() функция не будет работать без этой строки в вашем файле:

declare(ticks = 1);

Вероятно, оно должно быть вверху файла, перед определением класса.

поставить галочку это событие, которое происходит регулярно во время выполнения программы, и в этом случае каждый тик запускает программу для проверки поступающих сигналов. Я думаю. Я не знаю, почему он не включен по умолчанию, возможно, из-за увеличения загрузки процессора во время работы?

Я видел несколько утверждений о том, что тики устарели после PHP 5.3, но я только что протестировал в PHP 7.0.9 и могу подтвердить, что pcntl_signal() не работает без этого.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]