在我的应用程序中,我添加了一个关闭钩子,用于清理和完成最后一次交易。正如所有文档所述,这个钩子也被称为“正常”关闭 - 如果一切都已完成。
但我想向用户提供一些反馈意见:
“ctrl-c检测到 - 试图完成...”
这个反馈我只想放弃“突然”关闭。
那么有没有办法检测shutdown hook中的关闭类型?
答案 0 :(得分:0)
在我之前考虑过这个主题时,Ctrl-C
是正常的关闭事件(如Linux中的kill -15 <pid>
)。因此,你的关机钩子应该可以工作。
来自javadoc(Runtime.addShutdownHook()
):
“
Java虚拟机关闭以响应两种 事件:
当最后一个非守护程序线程退出或时,程序正常退出 当调用exit(等效,System.exit)方法时,或
虚拟机终止以响应用户中断, 例如键入^ C或系统范围的事件,例如用户注销或 系统关闭。
”。
但是还有一个未被捕获的关闭(如Linux中的kill -9 <pid>
),这种情况无法捕获并处理它。进程(JVM)将在操作系统级别被终止,并且不会为应用程序生成任何信号。