Comment tuer un processus qui ne meurt jamais?


26

Problème

J'ai un processus java qui ne meurt ni avec SIGTERM ni 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

Il réapparaît chaque fois qu'un signal est reçu.

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

Cela semble étrange mais même si je redémarre le serveur, il ne meurt toujours pas .

Le processus a été exécuté via le script init avec la commande ci-dessous:

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} &

Existe-t-il un moyen de forcer ce processus à tuer autre que la réinstallation du système d'exploitation?

Environnement

Processus:

logstash 5.0.0~alpha5

OS:

Red Hat Enterprise Linux Server release 6.7 (Santiago)

Version 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)

Le serveur est déployé sur Microsoft Azure.


Renommer l'un des fichiers requis pour le processus électronique avant de le tuer devrait l'empêcher de redémarrer avec succès.
— Hagen von Eitzen

6
Tu dois le décapiter! Ce processus est clairement un Highlander.
— beppe9000

4
@ beppe9000 Et pendant que nous sommes dans cette humeur, nous pourrions aussi bien exécuter ses parents.
— Dmitry Grigoryev

2
Dès que j'ai vu le titre, je savais que ce serait Logstash
— Mark Henderson

1
Tirez dessus avec une balle en adamantium dans la tête.
— noɥʇʎԀʎzɐɹƆ

Réponses:


77

init: processus principal logstash (2546) tué par le signal KILL

En fait, votre processus s'arrête là.

init: processus principal de logstash terminé, réapparition

Un nouveau processus logstash est démarré par init pour le remplacer.


Cela montre également quel processus de contrôle est responsable du redémarrage de logstash: init . (Sur RHEL 6 et CentOS qui est Upstart) Votre processus démarre très probablement à partir de l'un /etc/inittabou d'un fichier de dépôt dans /etc/init/logstash.conf(ou similaire) et doit être contrôlé avec l'outil approprié, initctlet non avec kill.

Essayez initctl listde voir s'il y a une logstash.

Alors initctl stop logstashl'arrêtera.

La modification ou la suppression du fichier conf dans / etc / init vous permettra de le désactiver de manière permanente.

Vous pourriez même être en mesure de contrôler le travail avec les commandes serviceet chkconfig.


4
+1 pour l'utilisation du bon outil pour le travail.
— mât

0

C'est probablement parce que logstash-relay est en cours d'exécution ... Vous devriez essayer d' arrêter logstash-relay

après cette vérification si le ps est là alors liste initctl | Trier

J'espère que cela t'aidera! Cela a résolu le problème pour moi!

Merci

VR


Les informations contenues dans la question indiquent clairement que c'est lui initqui était responsable de la réapparition du processus.
— kasperd
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.