使用"TERM"进行信号处理

cha*_*thu 16 java signals

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

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

Von*_*onC 37

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

Trejkaz评论:

关于Java的当前版本,因为"这个信号处理代码失败INT"信号"由VM或OS"保留.
此外,没有其他的有效信号名称的东西时,要求关闭应用程序实际上火(我只是苦心测试了所有的人的,我可以了解......)
关闭挂接大部分作品,但我们发现,在我们的情况下,它不是但是,下一步显然是要在JVM的后面注册一个处理程序

该章" 积分信号和异常处理中"的" 故障排除指南HotSpot虚拟机 "中提到的信号" ,"只适用于Solaris OS和Linux. 仅提及Windows上的异常处理.SIGTERMSIGINTSIGHUP


原始答案(2009年9月)

一个ShutdownHook应该能够处理这种情况

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

(有警告)
另见:

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

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('.');
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 我知道我不应该,但是大蒜串+1。它让我发笑。 (2认同)