Подтвердить что ты не робот

Деструкторы и функции выключения при выходе из Ctrl + C в PHP-CLI

Если я использую Ctrl + C для выхода из PHP скрипт, запущенного в CLI, не обрабатываются ни функции выключения, ни деструкторы созданных объектов, ни выходные буферы. Вместо этого программа просто умирает. Теперь это, вероятно, хорошо, так как предполагается Ctrl + C. Но есть ли способ изменить это? Можно ли заставить Ctrl + C выполнять функции выключения?

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

4b9b3361

Ответ 1

Очевидно, что PCNTL только * nix, но... Вы можете регистрировать обработчики для всех отдельных сигналов для более надежного решения, но специально для чего-то, когда встречается прерывание CTL + C:

<?php
declare(ticks = 1);

pcntl_signal(SIGINT, function() {
    echo "Caught SIGINT\n";
    die;
});

while (true) {
    // waiting for your CTRL+C
}