【问题标题】:Java, managed application shutdown as response to CTRL^DJava,托管应用程序关闭作为对 CTRL^D 的响应
【发布时间】:2012-10-29 13:23:57
【问题描述】:

我开发了一个 Java 在线分布式应用程序,它通常一直处于活动状态(不是 GUI)。

我有兴趣在关机前执行一些步骤,以防管理员对此类关机感兴趣。

我知道 CTRL^C 会停止 JVM,我想知道我是否可以在 JVM 关闭之前挂钩 CTRL^C 并执行一些额外的操作,或者在 CTRL^D 事件中添加一些挂钩以执行相同的操作。

我几乎可以肯定某处有一个帖子描述了类似的问题,我希望能提供指向此类帖子的链接。

我对任何第三方外部 jar 或任何 JNI 解决方案不感兴趣。

如果没有讨论相同问题的帖子,我将不胜感激代码示例 sn-p。

附加限制:此解决方案应适用于 UNIX 和 Windows。

编辑

这里提出的一个解决方案是使用Runtime.getRuntime().addShutdownHook(new Thread() {})

据我了解,创建了一个新线程,它将侦听并等待关闭事件发生。

  1. 我想知道是否可以通过某种方式向主线程发出关闭发生的信号(如前所述,我有一个分布式系统,我需要通知每个线程此类事件)?

  2. 我可以添加多个线程来监听这个事件吗?

【问题讨论】:

  • 在 Unix 系统上,Ctrl+D 结束标准输入。 Ctrl+终端处理的任何内容。所以你不能在Java程序中挂钩Ctrl+whatever。
  • @ignis: CTRL^* 不是必须的,欢迎任何其他组合
  • @beny23:+1,谢谢,我错过了这篇文章,希望它会有所帮助,我现在就去看看
  • @beny23:请看我的编辑,很抱歉我已经更新了问题,我可能不得不打开一个新问题,我将非常感谢对扩展问题的回答。

标签: java event-handling shutdown multiplatform


【解决方案1】:

要对 CTRL+C 做出反应,您必须添加一个关闭挂钩:

Runtime.getRuntime().addShutdownHook(new Thread() {
    public void run() {
        System.out.println("I'll be back!");
    }
});

【讨论】:

  • 谢谢,我已经在 beny23 提供的评论中的帖子中阅读了此解决方案
  • 请看我的编辑,很抱歉我已经更新了这个问题,我可能不得不打开一个新问题,如果你能扩展你的答案,我将不胜感激。
猜你喜欢
  • 2012-11-21
  • 2010-09-23
  • 1970-01-01
  • 2017-01-13
  • 2012-12-06
  • 1970-01-01
  • 2011-05-16
  • 2011-11-22
  • 1970-01-01
相关资源
最近更新 更多