【发布时间】:2012-07-31 22:42:18
【问题描述】:
我有一个简单的 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>
它只是死了。如何让它在退出之前执行某些操作?我的一般想法是使用这个框架来捕获由于维护或故障而重新启动服务器而导致该脚本在服务器上死机的时间。
非常感谢
【问题讨论】: