如何在获取Ctrl + C后退出?
按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
默认情况下,这可能源自“让困难的事情成为可能”的理念,除非某些退出操作需要很长时间才能运行,您仍然应该在INT
或TERM
信号上执行它们,如果用户立即关机, KILL
。
在kill('INT',$$)'之前,我会将$ SIG {INT}设置回“DEFAULT”。 – 2013-05-12 12:38:21
@sid_com好的,在这种情况下,关键是你是否想要运行'END'块。没有几个理由,所以'出口'仍然是可取的。 – amon 2013-05-12 13:00:11
是什么给了你这个想法?为什么要这样“更正确”? – innaM 2013-05-12 11:49:06
因为迄今为止据我所知,这就是Ctrl + C如果我没有抓到它会做的。 – 2013-05-12 13:50:43