Shutdown hook如何区分正常和突然(由用户)关闭

时间:2013-11-11 10:43:17

标签: java shutdown-hook

在我的应用程序中,我添加了一个关闭钩子,用于清理和完成最后一次交易。正如所有文档所述,这个钩子也被称为“正常”关闭 - 如果一切都已完成。

但我想向用户提供一些反馈意见:

  

“ctrl-c检测到 - 试图完成...”

这个反馈我只想放弃“突然”关闭。

那么有没有办法检测shutdown hook中的关闭类型?

1 个答案:

答案 0 :(得分:0)

在我之前考虑过这个主题时,Ctrl-C是正常的关闭事件(如Linux中的kill -15 <pid>)。因此,你的关机钩子应该可以工作。

来自javadoc(Runtime.addShutdownHook()): “

  

Java虚拟机关闭以响应两种   事件:

     

当最后一个非守护程序线程退出或时,程序正常退出   当调用exit(等效,System.exit)方法时,或

     

虚拟机终止以响应用户中断,   例如键入^ C或系统范围的事件,例如用户注销或   系统关闭。

”。

但是还有一个未被捕获的关闭(如Linux中的kill -9 <pid>),这种情况无法捕获并处理它。进程(JVM)将在操作系统级别被终止,并且不会为应用程序生成任何信号。