如何杀死一个永不消亡的进程?

Yu *_*abe 26 linux centos6 logstash

问题

我有一个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
Run Code Online (Sandbox Code Playgroud)

每次收到信号时它都会重生。

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
Run Code Online (Sandbox Code Playgroud)

这听起来很奇怪,但即使我重新启动服务器,它仍然没有死

进程是通过 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} &
Run Code Online (Sandbox Code Playgroud)

除了重新安装操作系统之外,还有什么方法可以强制终止此进程?

环境

过程 :

logstash 5.0.0~alpha5
Run Code Online (Sandbox Code Playgroud)

操作系统:

Red Hat Enterprise Linux Server release 6.7 (Santiago)
Run Code Online (Sandbox Code Playgroud)

爪哇版:

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)
Run Code Online (Sandbox Code Playgroud)

服务器部署在 Microsoft Azure 上。

HBr*_*ijn 78

init:logstash 主进程 (2546) 被 KILL 信号杀死

实际上,您的过程确实到此为止。

init:logstash 主进程结束,重新生成

init 启动一个新的logstash 进程来替换它。


这也显示了哪个控制进程负责重新启动 logstash: init。(在 RHEL 6 和 CentOS 上是 Upstart)您的进程很可能从(或类似)中的一个/etc/inittab或一个插入文件开始,/etc/init/logstash.conf并且应该使用 apropiate 工具进行控制,initctl而不是使用kill.

尝试initctl list查看是否存在 logstash。

然后initctl stop logstash会阻止它。

编辑或删除 /etc/init 中的 conf 文件将允许您永久禁用它。

您甚至可以使用servicechkconfig命令来控制作业。

  • +1 表示使用正确的工具完成工作。 (4认同)