Come uccidere un processo che non muore mai?


26

Problema

Ho un processo Java che non muore né con SIGTERM né 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

Riappare ogni volta che viene ricevuto il segnale.

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

Sembra strano ma anche se riavvio il server, continua a non morire .

Il processo è stato eseguito tramite lo script init con il comando seguente:

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

C'è un modo per forzare questo processo a uccidere se non reinstallare il sistema operativo?

Ambiente

Processi :

logstash 5.0.0~alpha5

OS:

Red Hat Enterprise Linux Server release 6.7 (Santiago)

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

Il server è distribuito su Microsoft Azure.


Rinominare uno dei file richiesti per l'eprocesso prima di ucciderlo dovrebbe impedirne il riavvio corretto.
— Hagen von Eitzen,

6
Devi decapitarlo! Quel processo è chiaramente un Highlander.
— beppe9000,

4
@ beppe9000 E mentre siamo dell'umore giusto, potremmo anche giustiziare i suoi genitori.
— Dmitry Grigoryev il

2
Non appena ho visto il titolo, ho capito che sarebbe stato Logstash
— Mark Henderson

1
Sparagli con un proiettile di adamantio in testa.
— noɥʇʎԀʎzɐɹƆ

Risposte:


77

init: processo principale logstash (2546) ucciso dal segnale KILL

In realtà il tuo processo si ferma qui.

init: processo principale del logstash terminato, rigenerazione

Un nuovo processo logstash viene avviato da init per sostituirlo.


Questo mostra anche quale processo di controllo è responsabile del riavvio del logstash: init . (Su RHEL 6 e CentOS che è Upstart) Il tuo processo molto probabilmente viene avviato da uno /etc/inittabo da un file drop-in /etc/init/logstash.conf(o simile) e dovrebbe essere controllato con lo strumento apropiate initctle non con kill.

Prova initctl lista vedere se logstash è lì.

Quindi initctl stop logstashlo fermerà.

La modifica o la rimozione del file conf in / etc / init ti consentirà di disabilitarlo in modo persistente.

Potresti anche essere in grado di controllare il lavoro con i comandi servicee chkconfig.


4
+1 per l'utilizzo dello strumento giusto per il lavoro.
— Albero

0

Probabilmente è perché logstash-relay è in esecuzione ... Dovresti provare a fermare logstash-relay

dopo questo controllo se il ps è lì quindi lista initctl | ordinare

Spero che questo ti possa aiutare! Mi ha risolto il problema!

Grazie

VR


Le informazioni nella domanda indicano chiaramente initche era responsabile della rigenerazione del processo.
— Kasperd,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.