2013-05-12 38 views
1

我抓到一个CtrlC做一个清理是更正确的退出程序kill('INT', $$)比退出程序exit()如何在获取Ctrl + C后退出?

+0

是什么给了你这个想法?为什么要这样“更正确”? – innaM 2013-05-12 11:49:06

+0

因为迄今为止据我所知,这就是Ctrl + C如果我没有抓到它会做的。 – 2013-05-12 13:50:43

回答

4

按Ctrl - ç发送INT信号到你的过程。处理,经过发送另一个INT是没用的:

perl -E'$SIG{INT}=sub{say "interrupted"; $c++ < 5 and kill INT => $$}; <>' 

这是贯彻落实递归 goto的一种不寻常的方式,但没有^C ^C ^C量将终止程序。 (按回车键退出)。

如果你想exit该程序,做到这一点(最好具有非零状态)。


perlmod相关报价:

END代码块尽可能晚地执行,也就是说,perl的运行完毕的程序和之前的解释正在退出,即使后它由于die()函数而退出。 (但如果它是通过exec变形到另一个程序,或由被吹出来的水的信号,你有陷阱,自己(如果可以的话)。

即自中断kill INT => $$不会执行END默认情况下,这可能源自“让困难的事情成为可能”的理念,除非某些退出操作需要很长时间才能运行,您仍然应该在INTTERM信号上执行它们,如果用户立即关机, KILL

+0

在kill('INT',$$)'之前,我会将$ SIG {INT}设置回“DEFAULT”。 – 2013-05-12 12:38:21

+1

@sid_com好的,在这种情况下,关键是你是否想要运行'END'块。没有几个理由,所以'出口'仍然是可取的。 – amon 2013-05-12 13:00:11