Какой сигнал JVM подает во время необработанного исключения?

1

Какой сигнал (SIGTERM, SIGINT ,...) поднимает JVM во время необработанного исключения?

Например, исключением может быть java.lang.NumberFormatException.

  • 1
    Какая реализация JVM вам интересна?
  • 0
    Почему JVM вообще вызывает сигнал POSIX?
Показать ещё 3 комментария
Теги:
signals

1 ответ

2
Лучший ответ

Необработанные исключения не обязательно заставляют JVM поднять сигнал - это не обязательно: исключение попадает в системный код Java и обрабатывается там (печатает трассировку стека и, например, выходы).

Могут быть случаи, когда JVM поднимают сигнал, чтобы вызвать обработчик сигнала для записи дополнительной диагностической информации.

С другой стороны, Oracle JVM (например) устанавливает обработчики сигналов, чтобы уловить некоторые конкретные ошибки и преобразовать их в исключения - подробнее см. Здесь.

EDIT, чтобы следить за комментариями выше, и на основе ссылки на источник (хотя вы не показываете сценарий, который вызывает неудачную программу Java AFAICT):

Ловушки, которые вы установили, заставляют интерпретатор оболочки устанавливать обработчики сигналов, если он получает SIGINT/... Они не вызывают, если дочерний процесс получает такой сигнал (повышение приводит к тому, что рассматриваемый процесс получает сигнал - чтобы сигнализировать другой процесс, который вам нужен, чтобы убить и друзей).

Поэтому, даже если JVM должен был поднять сигнал, оболочка не получит его.

Что может произойти в вашем случае, так это то, что bash настроен на выход с ошибкой (например, set -o errexit), и поэтому код освобождения блокировки не запускается просто потому, что код выхода JVM не равен null из-за необработанного исключения.

Чтобы исправить это, добавьте ERR (и, возможно, EXIT) в signal_spec вашего вызова ловушки.

  • 0
    Я проверю это и сообщу. Спасибо!
  • 0
    Просто хотел обновить это (наконец-то). Мне действительно нужно было поймать ERR - хотя я перестал пытаться убирать потом. Вместо этого я регистрирую проблему. В очередной раз благодарим за помощь!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню