Perlの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;
}
これは、「ユーザーの要求を処理している間、プロセスを妨げない」という点で非常に効果的です。ただし、プロセスが新しい要求を待機している場合、最終的に何らかの要求を取得して処理するまで、ため息ベースの出口は実行されません。
これに対する回避策はありますか?リクエストを待っている間にHUP(または他のシグナル、変更可能)がスクリプトに到達した場合に、スクリプトをすぐに終了させるために実現したいこと。