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


26

问题

我的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

每当收到信号时都会重生。

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

听起来很奇怪,但是即使我重新启动服务器,它也不会死

使用以下命令通过初始化脚本执行了进程:

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

操作系统:

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


在终止该进程之前,重命名该进程所需的文件之一将阻止其成功重启。
哈根·冯·埃森

6
你要斩首!这个过程显然是一个高地人。
beppe9000 '16

4
@ beppe9000在这种心情下,我们不妨处决其父母。
德米特里·格里戈列耶夫

2
一看到标题,我便知道这将是Logstash
Mark Henderson

1
用金刚弹射击。
noɥʇʎԀʎzɐɹƆ

Answers:


77

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

实际上,您的过程确实在这里停止。

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

一个新的 logstash过程是由init开始取代它。


这也表明哪个控制进程负责重新启动logstash:init。(在Upstart的RHEL 6和CentOS上)您的过程很可能从(或类似的)/etc/inittab文件/etc/init/logstash.conf或嵌入式文件开始,应使用适当的工具(initctl而不是)进行控制kill

尝试initctl list查看是否有logstash。

然后initctl stop logstash将其停止。

在/ etc / init中编辑或删除conf文件将使您能够永久禁用它。

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


4
+1以使用正确的工具进行作业。
桅杆

0

可能是因为logstash-relay正在运行...您应该尝试停止Logstash-Relay

在此之后检查ps是否存在,然后initctl list | 分类

我希望这能帮到您!它为我解决了问题!

谢谢

虚拟现实


问题中的信息清楚地表明是由init哪个负责重新生成该过程。
kasperd'7
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.