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