Деструкторы и функции выключения при выходе из Ctrl + C в PHP-CLI
Если я использую Ctrl + C для выхода из PHP скрипт, запущенного в CLI, не обрабатываются ни функции выключения, ни деструкторы созданных объектов, ни выходные буферы. Вместо этого программа просто умирает. Теперь это, вероятно, хорошо, так как предполагается Ctrl + C. Но есть ли способ изменить это? Можно ли заставить Ctrl + C выполнять функции выключения?
В частности, речь идет о сериализации и сохранении данных при выходе из script, поэтому его можно перезагрузить и возобновить при следующем запуске script. Периодически сохранение данных может работать, но все равно потеряет все, начиная с последнего сохранения. Какие еще существуют варианты?
Ответы
Ответ 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
}
Ответ 2
Взгляните на PCNTL, особенно pcntl_signal()