使用“TERM”进行信号处理

时间:2009-09-11 05:40:25

标签: java signals

我有一个独立的应用程序,我必须使用确认对话框提示用户保存他在尝试按start-->shutdown关闭系统时所做的更改。

我开始知道使用signalhandlers我们可以做到 有人可以帮助我如何使用信号处理程序

1 个答案:

答案 0 :(得分:37)

2012年5月更新(2年半后)

Trejkaz评论:

  

在当前版本的Java上,此信号处理代码失败,因为“INT”信号“由VM或OS保留”。
  此外,当某些东西要求关闭时,其他任何有效的信号名称都不会触发(我只是仔细测试了所有我能找到的信息......)
  关闭钩子大部分都有效但我们发现在我们的情况下它没有触发,所以下一步显然是在JVM的后面注册一个处理程序

Integrating Signal and Exception Handling”的“Troubleshooting Guide for HotSpot VM”一章仅针对Solaris OS和Linux提及信号“SIGTERMSIGINTSIGHUP”。
仅提到Windows上的异常处理。


原始答案(2009年9月)

ShutdownHook应该能够处理这种情况

Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
    public void run() {
        // what you want to do
    }
}));

caveats
另见:

作为简单信号处理的例证:

public class Aaarggh {
  public static void main(String[] args) throws Exception {
    Signal.handle(new Signal("INT"), new SignalHandler () {
      public void handle(Signal sig) {
        System.out.println(
          "Aaarggh, a user is trying to interrupt me!!");
        System.out.println(
          "(throw garlic at user, say `shoo, go away')");
      }
    });
    for(int i=0; i<100; i++) {
      Thread.sleep(1000);
      System.out.print('.');
    }
  }
}