Назад | Перейти на главную страницу

Действительно ли 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...

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

С надеждой, kill -3 не завершает процесс JVM.

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

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

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

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

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