Это вполне может быть специфическая проблема реализации JVM. Мы используем недокументированный / неподдерживаемый API (sun.misc.Signal/SignalHandler
), и поэтому никакой контракт на поведение API не гарантируется.
Реализация IBM JVM может делать вещи, связанные с обработкой сигналов, иначе, чем реализация SUN JVM, и, таким образом, вызывать эту проблему. Так что этот конкретный вариант использования работает в JVM SUN, но не в JVM IBM.
Но попробуйте следующее (я сам не могу попробовать):
Отключите все комбинации при запуске JVM с одним / двумя / тремя из этих параметров и при наличии возможных комбинаций значений.
- опция
-Xrs
указана / не указана
- свойство
ibm.signalhandling.sigint
установлено на true
/ false
- свойство
ibm.signalhandling.rs
установлено на true
/ false
(свойства были найдены через Google в нескольких дампах ошибок, но я не могу найти какую-либо конкретную документацию по ним)
Я не знаю, поддерживает ли IBM JVM этот специальный флаг, но вы также можете попробовать добавить его, что в SUN JVM кажется специфичным для некоторых проблем с обработчиками сигналов в linux / solaris
-XX:-AllowUserSignalHandlers
Или попробуйте использовать собственный обработчик сигнала, если это вариант для вас. Проверьте предоставленные образцы кода:
Хотя это не относится к вашей конкретной проблеме, статья IBM об обработке сигналов JVM (немного устаревшая, но все еще в основном правильная). С примерами для обработчиков сигналов собственного кода:
Откровения по обработке и завершению сигналов Java
Но я полагаю, что все это может оказаться бесполезным, поскольку реализация IBM JVM может полагаться на правильную работу SIGINT
и, таким образом, никогда не даст вам возможности самостоятельно обработать SIGINT
.
Btw. от описания до флага -Xrs
Я понимаю, что на самом деле это может помешать вам делать то, что вы хотите. Там написано
Когда -Xrs
используется на JVM от Sun,
сигнальные маски для SIGINT, SIGTERM,
SIGHUP и SIGQUIT не изменяются
обработчики сигналов JVM и для этих
сигналы не установлены .
Или это может означать, что только действия JVM по умолчанию для сигналов не выполняются. Или это может зависеть от того, что на самом деле означает реализация JVM.