Процесс Java не прерывается при отправке сигнала уничтожения - PullRequest
0 голосов
/ 09 июля 2019

Иногда мы сталкиваемся с тем, что пытаемся убить процесс Java, но процесс не завершается, мы должны отправить kill -9, чтобы завершить его.

Задание:

  1. Когда процесс java получит сигнал kill -15, что произойдет
  2. Какова возможная причина, если процесс не завершается, и как диагностировать?

Ответы [ 2 ]

2 голосов
/ 10 июля 2019

Когда процесс Java, а точнее JSM HotSpot, получает сигнал 15 (SIGTERM), он инициирует последовательность выключения.Одним из его важных шагов является вызов перехватчиков завершения работы .

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

Используйте утилиту jstack, чтобы определить, что мешает своевременному завершению.Ищите поток SIGTERM handler в дампе потока - он, вероятно, будет ожидать завершения какого-либо другого потока (нарушителя).JVM не будет нормально выходить во время работы потока нарушителя.

0 голосов
/ 09 июля 2019
  1. kill -15: отправить SIGTERM , завершить процесс, но сначала разрешить его очистку.Мирное завершение.

  2. Ожидание ввода / вывода и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...