使用“TERM”的信号处理

2022-09-02 20:12:20

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

我开始知道,通过使用我们可以做到这一点。
有人可以帮助我如何使用信号处理程序吗?signalhandlers


答案 1

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

Trejkaz评论:

在当前版本的 Java 上,此信号处理代码失败,因为 “” 信号是 “由 VM 或操作系统保留的”。
此外,当某些内容请求关闭应用程序时,其他有效信号名称实际上都没有触发(我只是煞费苦心地测试了所有我能找到的信号名称......)
关闭钩子大多有效,但我们发现在我们的例子中它没有触发,所以下一步显然是在JVM的背后注册一个处理程序。INT

HotSpot VM 故障排除指南”的“集成信号和异常处理”一章中提到了信号“, , ”“仅适用于 Solaris OS 和 Linux。
仅提及 Windows 上的异常处理。SIGTERMSIGINTSIGHUP


原始答案(2009 年 9 月)

ShutdownHook 应该能够处理这种情况

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

(附带警告
另请参阅:

作为简单信号处理的图示:

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('.');
    }
  }
}

答案 2

推荐