จะฆ่ากระบวนการที่ไม่เคยตายได้อย่างไร?


26

ปัญหา

ฉันมีกระบวนการจาวาซึ่งไม่ได้ตายด้วย 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


การเปลี่ยนชื่อไฟล์หนึ่งในไฟล์ที่จำเป็นสำหรับ eprocess ก่อนที่จะฆ่ามันควรจะป้องกันไม่ให้รีสตาร์ทสำเร็จ
Hagen von Eitzen

6
คุณต้องตัดหัว! กระบวนการนั้นชัดเจนว่าเป็นภูเขา
beppe9000

4
@ beppe9000 และในขณะที่เราอยู่ในอารมณ์แบบนั้นเราก็อาจดำเนินการผู้ปกครอง
Dmitry Grigoryev

2
ทันทีที่ฉันเห็นชื่อฉันรู้ว่านี่จะเป็น Logstash
Mark Henderson

1
ยิงมันด้วยกระสุน adamantium ในหัว
noɥʇʎԀʎzɐɹƆ

คำตอบ:


77

init: กระบวนการหลัก logstash (2546) ถูกฆ่าโดยสัญญาณ KILL

ที่จริงแล้วกระบวนการของคุณหยุดที่นี่

init: logstash กระบวนการหลักสิ้นสุดลง respawning

ใหม่กระบวนการ logstash จะเริ่มต้นโดย init จะแทนที่


ที่ยังเป็นแสดงให้เห็นว่าการควบคุมกระบวนการเป็นผู้รับผิดชอบสำหรับการเริ่มต้นใหม่ logstash: init (ใน RHEL 6 และ CentOS ที่เป็นพุ่งพรวด) กระบวนการของคุณส่วนใหญ่มีแนวโน้มได้รับการเริ่มต้นจากการอย่างใดอย่างหนึ่ง/etc/inittabหรือลดลงในแฟ้มใน/etc/init/logstash.conf(หรือคล้ายกัน) และควรมีการควบคุมด้วยเครื่องมือ apropiate ที่และไม่ได้มีinitctlkill

ลองinitctl listดูว่ามี logstash หรือไม่

จากนั้นinitctl stop logstashจะหยุด

การแก้ไขหรือลบไฟล์ conf ใน / etc / init จะช่วยให้คุณปิดการใช้งานมันอย่างต่อเนื่อง

คุณอาจควบคุมงานด้วยคำสั่งserviceและchkconfig


4
+1 สำหรับการใช้เครื่องมือที่เหมาะสมสำหรับงาน
เสา

0

อาจเป็นเพราะ logstash-relay กำลังทำงาน ... คุณควรพยายามหยุด logstash-relay

หลังจากการตรวจสอบนี้ถ้ามี PS แล้วinitctl list | ประเภท

ฉันหวังว่านี่จะช่วยคุณได้! มันแก้ไขปัญหาสำหรับฉัน!

ขอบคุณ

VR


ข้อมูลในคำถามแสดงให้เห็นอย่างชัดเจนว่าinitเป็นความรับผิดชอบในการตอบสนองต่อกระบวนการ
kasperd
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.