抓住Ctrl + C后如何退出?

时间:2013-05-12 11:40:34

标签: perl signals exit

在我抓住 Ctrl C 进行清理后,使用kill( 'INT', $$ )退出程序比使用{{退出程序更正确“更正确1}}?

1 个答案:

答案 0 :(得分:4)

Ctrl - C INT信号发送到您的流程。在处理之后发送另一个INT是无用的:

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

这是实现 recursion gotos的一种不寻常的方式,但是^C ^C ^C的任何数量都不会终止程序。 (按enter退出)。

如果您想exit该程序,请执行此操作(最好具有非零状态)。


perlmod的相关引用:

  

END代码块尽可能晚地执行,也就是说,在perl完成程序运行之后并且在退出解释器之前,即使它由于{{1}而退出功能。 (但如果它通过die()变成另一个程序,或者被一个信号吹出水面则不会 - 你必须自己陷阱(如果可以的话)。

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