Обработка сигналов с использованием "TERM"

У меня есть отдельное приложение, в котором я должен предлагать пользователю диалоговое окно подтверждения, чтобы сохранить изменения, сделанные им, когда он пытается отключить систему start-->shutdown.

Я узнал, что с помощью signalhandlers мы можем это сделать.
Может ли кто-нибудь помочь мне, как использовать обработчики сигналов

Ответы

Ответ 1

Обновление май 2012 года (2 и полтора года спустя)

Trejkaz комментарии:

В текущих версиях Java этот код обработки сигнала терпит неудачу, потому что сигнал "INT" зарезервирован виртуальной машиной или ОС.
Кроме того, ни одно из других допустимых имен сигналов не срабатывает, когда что-то требует закрытия приложения (я просто тщательно проверил все те, которые я смог узнать о них...)
Ключ отключения обычно работает, но мы обнаруживаем, что в нашем случае он не срабатывает, поэтому следующий шаг, очевидно, должен прибегнуть к регистрации обработчика позади JVM назад

Глава " Интеграция обработки сигналов и исключений " Руководство по устранению неполадок для HotSpot VM "упоминает сигналы" SIGTERM, SIGINT, SIGHUP "только для ОС Solaris и Linux.
Указывается только обработка исключений в Windows.


Оригинальный ответ (сентябрь 2009 г.)

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