问题
我有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
这听起来很奇怪,但即使我重新启动服务器,它仍然不会死.
使用以下命令通过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 main process (2546) killed by KILL signal
实际上你的过程确实停在这里.
init: logstash main process ended,respawning
init启动新的logstash进程以替换它.
这也表明哪个控制进程负责重启logstash:init. (在RHEL 6和CentOS上是Upstart)您的进程很可能是从/ etc / inittab或/etc/init/logstash.conf(或类似)中的drop-in文件开始的,应该使用apropiate工具控制,initctl而不是kill.
尝试使用initctl列表来查看是否存在logstash.
然后initctl stop logstash将停止它.
编辑或删除/ etc / init中的conf文件将允许您持久禁用它.
您甚至可以使用service和chkconfig命令控制作业.