Як вбити процес, який ніколи не вмирає?


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

Це звучить дивно, але навіть я перезавантажую сервер, він все ще не вмирає .

Процес виконувався за допомогою скрипта init із командою нижче:

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.


Перейменування одного з необхідних файлів для th eprocess перед його вбивством повинно запобігти його успішному перезапуску.
Хаген фон Ейтцен

6
Ви повинні обезголовити це! Цей процес, очевидно, є гордером.
beppe9000

4
@ beppe9000 І хоча ми в такому настрої, ми можемо також стратити його батьків.
Дмитро Григор’єв

2
Як тільки я побачив назву, я зрозумів, що це буде Лоґсташ
Марк Хендерсон

1
Стріляйте його кулею адамантинта в голову.
noɥʇʎԀʎzɐɹƆ

Відповіді:


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перевірити, чи є логсташ.

Тоді initctl stop logstashце зупинить.

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

Можливо, ви навіть зможете контролювати завдання за допомогою команд serviceта chkconfig.


4
+1 за використання правильного інструменту для роботи.
Щогла

0

Це, мабуть, через те, що запущено реле logstash ... Ви повинні спробувати зупинити logstash-реле

після цього перевірте, чи є ps, тоді список initctl | сортувати

Сподіваюся, це допоможе тобі! Це вирішило проблему для мене!

Спасибі

ВР


Інформація у питанні чітко вказує на те, що саме вона initвідповідала за відновлення процесу.
kasperd
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.