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

问题

我有没有与SIGTERM或SIGKILL都不死的java进程。

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 

OS:

 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上。

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

其实你的过程在这里停止。

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

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


这也显示了哪个控制进程负责重新启动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命令来控制作业。

这可能是因为logstash-relay正在运行…您应该尝试停止logstash-relay

在这之后检查ps是否在那里然后initctl list | 分类

我希望这会帮助你! 它解决了我的问题!

谢谢

VR