Kill -3 действительно завершает процесс Java? Или просто генерирует дамп потока?

Kill -3 действительно завершает процесс Java? Или просто генерирует дамп потока?

CentOS 5.9

Если я побегу, kill -3 <java process pid>что на самом деле произойдет?эта статья в красной шляпе, я понимаю, что создается дамп потока Java, но завершается ли процесс? Судя по моим тестам, это не так:

[root@foobox ~]# kill -3 14559

[root@foobox ~]# service foo status
foo (pid 14559) is running...

Другими словами: могу ли я собрать дамп потока таким образом, не влияя на работу сервиса?

решение1

Надеюсь, kill -3это не завершит процесс JVM.

Дамп потока оказывает незначительное влияние на работу службы во время сбора трассировки стека, особенно если запущены тысячи потоков.

Обратите внимание, что если -Xrsиспользуется этот флаг, JVM больше не обрабатывает SIGQUITсигнал, и этот сигнал, скорее всего, завершит процесс, если только в каком-либо машинном коде не предусмотрен альтернативный обработчик.

решение2

https://superuser.com/questions/352147/что-означает-kill-3может предоставить вам дополнительную информацию.

Процесс должен определить, как именно он будет реагировать, когда получитSIGQUIT

Поскольку этот сигнал может быть перехвачен, проигнорирован или заблокирован процессом, он может не учитывать kill. Если вы хотите посмотреть еще ближе, я предлагаю отслеживать стек PID с помощью straceпри отправке его SIGQUITс помощью kill.

Связанный контент