Обработка сигналов в виртуальной машине Java

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

По крайней мере SIGINT и SIGKILL должен быть совершенно независимым от платформы.

Ответы

Ответ 1

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

Крюки завершения работы добавляются с помощью Runtime.addShutdownHook(Thread).

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