Обрабатывать сигналы в виртуальной машине Java - PullRequest
12 голосов
/ 02 сентября 2008

Можно ли обрабатывать сигналы POSIX в виртуальной машине Java?

Как минимум SIGINT и SIGKILL должны быть полностью независимыми от платформы.

Ответы [ 2 ]

12 голосов
/ 03 сентября 2008

JVM реагирует на сигналы самостоятельно. Некоторые из них приведут к корректному завершению работы JVM, что включает в себя запуск ловушек отключения. Другие сигналы приведут к прерыванию работы JVM без использования перехватчиков отключения.

Завершающие хуки добавляются с помощью Runtime.addShutdownHook (Thread) .

Я не думаю, что JDK предоставляет официальный способ обработки сигналов в вашем Java-приложении. Однако я нашел эту статью IBM , в которой описывается использование недокументированного класса sun.misc.Signal, чтобы сделать именно это. Статья датируется 2002 годом и использует JDK 1.3.1, но я подтвердил, что класс sun.misc.Signal все еще существует в JDK 1.6.0.

4 голосов
/ 02 сентября 2008

Возможно Runtime # addShutdownHook ?

...