У меня есть приложение, которое работает с использованием Perl's CGI :: Fast .
В основном основной цикл кода:
while (my $cgi = CGI::Fast->new() ) {
do_whatever( $cgi );
}
Теперь я хотел добавить возможность убить его, но не прерывая обработанный в данный момент запрос. Для этого я добавил обработку в SIGHUP. Более или менее по линии:
my $sighupped = 0;
$SIG{ 'HUP' } = sub { $sighupped = 1; };
while (my $cgi = CGI::Fast->new() ) {
do_whatever( $cgi );
exit if $sighupped;
}
Что действительно хорошо работает, когда речь идет о "не мешающем процессе, пока он обрабатывает запрос пользователя". Но если процесс ожидает новый запрос, выход на основе sighup не будет выполнен, пока он, наконец, не получит некоторый запрос и не обработает его.
Есть ли какое-то решение для этого? Что я хотел бы добиться, чтобы скрипт немедленно завершил работу, если HUP (или другой сигнал, который можно изменить) достигает его во время ожидания запроса.