从 Perl 5.10.1 开始,这按预期工作:信号整数被捕获。
#!/usr/bin/perl
use strict;
use warnings;
$SIG{INT} = sub { die "Caught a sigint $!" };
sleep(20);
但是这里 SIGINT 并没有被困住。
#!/usr/bin/perl
use strict;
use warnings;
$SIG{INT} = sub { die "Caught a sigint $!" };
END {
sleep(20);
}
这可以通过在END
块中再次设置处理程序来解决,如下所示:
END {
$SIG{INT} = sub { die "Caught a sigint $!" };
sleep(20);
}
但是,如果您有多个块,那将不起作用:必须为每个块重新设置处理程序。
我试图弄清楚这一点,但在perldoc找不到解释。我能找到的唯一提到这种行为的是Practical Perl Programming AD Marshall 1999-2005的脚注
注意 发送到您的脚本的信号可以绕过 END 块。
有人会解释这个吗?