Как убить процесс, который никогда не умирает?

26

проблема

У меня есть Java-процесс, который не умирает ни с SIGTERM, ни с SIGKILL.

logstash  2591     1 99 13:22 ?        00:01:46 /usr/bin/java -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+DisableExplicitGC -Djava.awt.headless=true -Dfile.encoding=UTF-8 -XX:+HeapDumpOnOutOfMemoryError -Xmx1g -Xms256m -Xss2048k -Djffi.boot.library.path=/usr/share/logstash/vendor/jruby/lib/jni -Xbootclasspath/a:/usr/share/logstash/vendor/jruby/lib/jruby.jar -classpath : -Djruby.home=/usr/share/logstash/vendor/jruby -Djruby.lib=/usr/share/logstash/vendor/jruby/lib -Djruby.script=jruby -Djruby.shell=/bin/sh org.jruby.Main --1.9 /usr/share/logstash/lib/bootstrap/environment.rb logstash/runner.rb --path.settings /etc/logstash

Он появляется каждый раз при получении сигнала.

Sep 15 13:22:17 test init: logstash main process (2546) killed by KILL signal
Sep 15 13:22:17 test init: logstash main process ended, respawning

Звучит странно, но даже если я перезагружаю сервер, он все равно не умирает .

Процесс был выполнен через скрипт инициализации с помощью следующей команды:

NAME=logstash
LS_USER=logstash
LS_OPTS="--path.settings=/etc/logstash"
LS_PIDFILE=/var/run/$NAME/$NAME.pid
LS_STDERR="/var/log/logstash/logstash.stderr"
DAEMON="/usr/share/logstash/bin/logstash"

runuser -s /bin/sh -c "exec $DAEMON ${LS_OPTS}" ${LS_USER} &>${LS_STDERR} &

Есть ли способ заставить этот процесс убить, кроме переустановки ОС?

Среда

Процесс :

logstash 5.0.0~alpha5

ОПЕРАЦИОННЫЕ СИСТЕМЫ :

Red Hat Enterprise Linux Server release 6.7 (Santiago)

Версия Java:

openjdk version "1.8.0_101"
OpenJDK Runtime Environment (build 1.8.0_101-b13)
OpenJDK 64-Bit Server VM (build 25.101-b13, mixed mode)

Сервер развернут в Microsoft Azure.

Ю Ватанабэ
источник
Переименование одного из необходимых файлов для процесса перед его уничтожением должно помешать его успешному перезапуску.
Хаген фон Айцен
6
Вы должны обезглавить это! Этот процесс явно является горцем.
beppe9000 15.09.16
4
@ beppe9000 И пока мы в таком настроении, мы можем с тем же успехом казнить его родителей.
Дмитрий Григорьев
2
Как только я увидел название, я понял, что это будет Logstash
Марк Хендерсон
1
Стреляйте в нее адамантиевой пулей в голове.
17.09.16

Ответы:

77

init: основной процесс logstash (2546) убит по сигналу KILL

На самом деле ваш процесс останавливается здесь.

init: основной процесс logstash завершен, респаун

Новый процесс logstash запускается INIT , чтобы заменить его.


Это также показывает, какой процесс управления отвечает за перезапуск logstash: init . (На RHEL 6 и CentOS, который является Upstart) Ваш процесс, скорее всего, запускается из /etc/inittabили из выпадающего файла /etc/init/logstash.conf(или аналогичного) и должен контролироваться с помощью инструмента apropiate, initctlа не с kill.

Попробуйте initctl listпосмотреть, есть ли logstash.

Тогда initctl stop logstashостановит это.

Редактирование или удаление файла conf в / etc / init позволит вам постоянно его отключать.

Вы могли бы даже быть в состоянии контролировать работу с serviceи chkconfigкомандами.

HBruijn
источник
4
+1 за использование правильного инструмента для работы.
Мачта
0

Это, вероятно, потому что logstash-relay работает ... Вы должны попытаться остановить logstash-relay

после этой проверки, если ps есть, тогда initctl list | Сортировать

Я надеюсь, что это поможет вам! Это исправило проблему для меня!

Благодарность

VR

vrousseu
источник
Информация в вопросе ясно указывает на то, что именно она initбыла ответственна за возрождение процесса.
Касперд