在我抓住 Ctrl C 进行清理后,使用kill( 'INT', $$ )
退出程序比使用{{退出程序更正确“更正确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 => $$
个块。这可能源于“让困难的事情成为可能”的理念。除非某些退出操作可能需要很长时间才能运行,否则您仍应在END
或INT
信号上执行这些操作。如果用户立即关机,仍然有TERM
。