¿Cómo matar un proceso que nunca muere?

26

Problema

Tengo un proceso de Java que no muere ni con 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

Reaparece cada vez que se recibe la señal.

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

Suena extraño, pero incluso cuando reinicio el servidor, todavía no muere .

El proceso se ejecutó a través del script de inicio con el siguiente comando:

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

¿Hay alguna forma de forzar este proceso a matar que no sea reinstalar el sistema operativo?

Medio ambiente

Proceso:

logstash 5.0.0~alpha5

OS:

Red Hat Enterprise Linux Server release 6.7 (Santiago)

Versión de 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)

El servidor se implementa en Microsoft Azure.

Yu Watanabe
fuente
Cambiar el nombre de uno de los archivos necesarios para el proceso antes de eliminarlo debería evitar que se reinicie correctamente.
Hagen von Eitzen
66
Tienes que decapitarlo! Ese proceso claramente es un Highlander.
beppe9000
44
@ beppe9000 Y mientras estemos de humor, también podríamos ejecutar a sus padres.
Dmitry Grigoryev
2
Tan pronto como vi el título, supe que sería Logstash
Mark Henderson
1
Dispárale con una bala de adamantium en la cabeza.
noɥʇʎԀʎzɐɹƆ

Respuestas:

77

init: proceso principal logstash (2546) asesinado por la señal KILL

En realidad su proceso se detiene aquí.

init: proceso principal logstash finalizado, reaparecer

Init inicia un nuevo proceso de logstash para reemplazarlo.


Eso también muestra qué proceso de control es responsable de reiniciar logstash: init . (En RHEL 6 y CentOS que es Upstart) Su proceso probablemente se inicia desde /etc/inittabun archivo desplegable /etc/init/logstash.conf(o similar) y debe controlarse con la herramienta adecuada, initctly no con kill.

Intenta initctl listver si logstash está allí.

Entonces initctl stop logstashlo detendrá.

Editar o eliminar el archivo conf en / etc / init le permitirá deshabilitarlo de forma persistente.

Incluso puede controlar el trabajo con los comandos servicey chkconfig.

HBruijn
fuente
44
+1 por usar la herramienta adecuada para el trabajo.
Mástil
0

Probablemente se deba a que logstash-relay se está ejecutando ... Debe intentar detener logstash-relay

después de esta comprobación, si el ps está allí, entonces initctl list | ordenar

¡Espero que esto ayude! ¡Me solucionó el problema!

Gracias

VR

vrousseu
fuente
La información en la pregunta indica claramente initque fue el responsable de reaparecer el proceso.
kasperd