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