我有使用 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;
}
当涉及到“在处理用户请求时不干扰过程”时,它的效果非常好。但是,如果进程正在等待新的请求,那么基于 sighup 的退出将不会被执行,直到它最终得到一些请求并处理它。
有什么解决方法吗?如果 HUP(或其他信号,可以更改)在等待请求时到达它,我想实现它以使脚本立即退出。