2

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

但我想给用户一些反馈:

“检测到 ctrl-c - 正在尝试完成……”

我只想在“突然”关闭时给出这个反馈。

那么有没有办法检测关闭挂钩中的关闭类型?

4

1 回答 1

0

正如我之前考虑的那样,Ctrl-C是正常的关机事件(如kill -15 <pid>在 Linux 中)。因此,您的关闭挂钩应该可以工作。

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

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

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

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

”。

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

于 2013-11-11T11:26:40.413 回答