【问题标题】:Shutdown hook how to distinguish normal and abrupt(by user) shutdown关机钩子如何区分正常和突然(由用户)关机
【发布时间】:2013-11-11 10:43:17
【问题描述】:

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

但我想给用户一些反馈:

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

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

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

【问题讨论】:

    标签: java shutdown-hook


    【解决方案1】:

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

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

    Java 虚拟机响应两种情况而关闭 事件:

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

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

    "。

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

    【讨论】:

    • 我编辑了我的问题的标题:我需要区分用户是否启动了关机。
    猜你喜欢
    • 2015-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-11
    • 1970-01-01
    • 1970-01-01
    • 2015-08-31
    • 1970-01-01
    相关资源
    最近更新 更多