Ответ 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
}
}));
(с оговорками)
См. Также:
- Обработка и завершение обработки Java (ссылка мертва, см. archive или mirror)
- обработка выходного сигнала java:
в качестве иллюстрации простой обработки сигналов:
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('.');
}
}
}