Làm thế nào để giết một daemon trong Linux?


1

Lưu ý: Trước khi bạn đánh dấu câu hỏi này là trùng lặp, xin lưu ý rằng tôi đã thử tất cả các giải pháp mà tôi có thể truy cập trực tuyến, nhưng tôi vẫn không thể giải quyết vấn đề.

Tôi chạy daemon thông qua lệnh sau:

rake resque:work QUEUE='*' &

Nó trả lại cho tôi 13031. Bây giờ, tôi muốn giết daemon này và tôi đã thử các lệnh sau:

kill -9 13031
kill 13031

Chạy cả hai lệnh đều nói: -bash: kill: (13031) - No such processvà bây giờ tôi bị kẹt. Tôi không thể tìm ra cách giết daemon.


2
pgrepcho daemon?
Reuben L.

Điều gì về pkill -9 rakehoặc để giết trường hợp ruby ​​của cào?
Hastur

Câu trả lời:


3

Tôi có một lý thuyết có thể cho việc này.

Khi bạn chạy ứng dụng như

$ rake resque:work QUEUE='*' &
[1] 13031

Các ứng dụng trong nội bộ làm một fork+exit, để chạy trong nền.

C mã tương đương sẽ là:

if(fork()) exit(0);

Vì vậy, quá trình với PID==13031sẽ sinh ra một quá trình con & tự thoát ra. Đứa trẻ sẽ tiếp tục chạy trong nền & sẽ được kế thừa bởi quá trình init (PID == 1).
Bạn có thể thấy nếu đây là trường hợp, nhấn một enterphím khác sau khi bắt đầu rakelệnh. Bạn có thấy những bản in như thế này không?

[1]+  Done                 rake resque:work QUEUE='*'

Hãy thử chạy pstrong thiết bị đầu cuối. Điều đó sẽ hiển thị quá trình con PID. Nếu bạn killđó, daemon sẽ thoát.

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.