我有一个简单的Perl脚本,它只是将一行文本打印到stdout。我想要完成的是当脚本运行时,如果我(或其他人)发出一个信号让该进程停止,我希望它捕获该信号并干净地退出。我的代码如下所示干净地在Perl中捕获信号
#!/usr/bin/perl -w
$| = 1;
use sigtrap 'handler' => \&sigtrap, 'HUP', 'INT','ABRT','QUIT','TERM';
while(1){
print "Working...\n";
sleep(2);
}
sub sigtrap(){
print "Caught a signal\n";
exit(1);
}
虽然这个效果很好,当我真正在命令行中按Ctrl-C,如果我发出了一个
kill -9 <pid>
它只是死亡。如何在退出前执行某些操作?我的一般想法是使用此框架来捕获此脚本因服务器重新启动以进行维护或故障而死于服务器时。
感谢很多提前
按下'Ctrl-C'发送'INT'信号**不是**'TERM',但默认动作如果对于一个交互过程是相同的。无论哪种信号都可以被捕获,不像'kill -9'。 'kill -l'将列出信号名称。 'stty -a'将显示'INT'到'Ctrl-C'的默认映射。 – JRFerguson 2012-08-03 11:44:25
哎唷!感谢您清除错误并为错误信息而感到抱歉。 – 2012-08-06 05:51:28