1

在我发现 a进行清理之后,退出程序是否比退出CtrlC程序更正确?kill( 'INT', $$ )exit()

4

1 回答 1

4

Ctrl-CINT信号发送到您的进程。处理后发送另一个INT没用:

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

这是一种不寻常的实现方式递归gotos,但不会^C ^C ^C终止程序。(按回车键退出)。

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


相关报价来自perlmod

END代码块尽可能晚地执行,也就是说,在 perl 完成程序运行之后并且就在解释器即将退出之前,即使它是作为函数的结果而退出的die()。(但如果它通过 变形为另一个程序exec,或者被信号吹出水面,则不是 - 你必须自己捕获它(如果可以的话)。

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

于 2013-05-12T11:50:37.547 回答