Làm thế nào để giết một quá trình không bao giờ chết?


26

Vấn đề

Tôi có quá trình java không chết với SIGTERM và 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

Nó đáp ứng tín hiệu mọi lúc được nhận.

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

Nghe có vẻ lạ nhưng ngay cả khi tôi khởi động lại máy chủ, nó vẫn không chết .

Quá trình được thực hiện thông qua init script với lệnh dưới đây:

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} &

Có cách nào để buộc quá trình này giết chết ngoài việc cài đặt lại HĐH không?

Môi trường

Quá trình :

logstash 5.0.0~alpha5

HĐH:

Red Hat Enterprise Linux Server release 6.7 (Santiago)

Phiên bản 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)

Máy chủ được triển khai trên Microsoft Azure.


Đổi tên một trong các tệp cần thiết cho quá trình xử lý trước khi tắt nó sẽ ngăn không cho nó khởi động lại thành công.
Hagen von Eitzen

6
Bạn phải chặt đầu nó! Quá trình đó rõ ràng là một người vùng cao.
beppe9000

4
@ beppe9000 Và trong khi chúng ta đang ở trong tâm trạng đó, chúng ta cũng có thể xử tử cha mẹ của nó.
Dmitry Grigoryev

2
Ngay khi nhìn thấy tiêu đề, tôi biết đây sẽ là Logstash
Mark Henderson

1
Bắn nó với một viên đạn adamantium vào đầu.
noɥʇʎԀʎzɐɹƆ

Câu trả lời:


77

init: quá trình chính logstash (2546) bị giết bởi tín hiệu KILL

Trên thực tế quá trình của bạn không dừng lại ở đây.

init: quá trình chính logstash kết thúc, hồi sinh

Một quá trình logstash mới được bắt đầu bằng init để thay thế nó.


Điều đó cũng cho thấy quá trình kiểm soát nào chịu trách nhiệm khởi động lại logstash: init . (Trên RHEL 6 và CentOS đó là Upstart) quá trình của bạn rất có thể được bắt đầu từ một trong hai /etc/inittabhoặc một thả trong tập tin trong /etc/init/logstash.conf(hoặc tương tự) và cần được kiểm soát với các công cụ apropiate, initctlvà không phải với kill.

Hãy thử initctl listxem logstash có ở đó không.

Rồi initctl stop logstashsẽ dừng lại.

Chỉnh sửa hoặc xóa tệp conf trong / etc / init sẽ cho phép bạn vô hiệu hóa nó liên tục.

Bạn thậm chí có thể kiểm soát công việc bằng các lệnh servicechkconfig.


4
+1 để sử dụng công cụ phù hợp cho công việc.
Cột

0

Có lẽ là do logstash-rơle đang chạy ... Bạn nên cố gắng dừng logstash-rơle

sau kiểm tra này nếu ps ở đó thì danh sách initctl | sắp xếp

Tôi hy vọng điều này sẽ giúp bạn! Nó đã khắc phục vấn đề cho tôi!

Cảm ơn

VR


Thông tin trong câu hỏi chỉ rõ rằng initđó là trách nhiệm đối với quá trình này.
kasperd
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.