我有一個簡單的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