Giết một quá trình tiếp tục khởi động lại


16

Điều gì xảy ra nếu 'kill -9' không hoạt động? hoặc Làm thế nào để giết một tập lệnh bắt đầu các quy trình mới? Dù sao cũng không giúp tôi.

Tôi có một kịch bản python bắt đầu tự động với id quá trình khác sử dụng cùng một cổng khi bị giết bằng cách sử dụng sudo kill -9 <pid>.

$ lsof -i :3002
COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
python  13242 ubuntu    3u  IPv4  64592      0t0  TCP localhost:3002 (LISTEN)
$ sudo kill -9 13242
$ lsof -i :3002
COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
python  16106 ubuntu    3u  IPv4  74792      0t0  TCP localhost:3002 (LISTEN)
$ sudo kill 16106
$ lsof -i :3002
COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
python  16294 ubuntu    3u  IPv4  75677      0t0  TCP localhost:3002 (LISTEN)

Đây không phải là quá trình Zombie.

$ ps -Al

4 S     0 16289     1  0  80   0 - 12901 poll_s ?        00:00:00 sudo
4 S  1000 16293 16289  0  80   0 -  1100 wait   ?        00:00:00 sh
0 S  1000 16294 16293  0  80   0 - 34632 poll_s ?        00:00:00 python

Tôi thậm chí đã cố gắng sudo pkill -f <processname>không có may mắn. Nó không muốn chết.

Cập nhật:

Đó là quá trình cha mẹ shcó cha mẹ sudonhư được đề cập trong bảng trên. Tôi không chắc có an toàn khi giết những người này đột ngột không. Ngoài ra đây là một máy chủ Ubuntu được chia sẻ.


Có vẻ như nó sắp chết. lsofĐầu ra của bạn hiển thị một pid mới mỗi lần. Quá trình chỉ đơn giản là khởi động lại.
Patrick

Có nó không muốn chết mãi mãi. Thức dậy như chưa bao giờ chết :(
Lakshminarayanan Guptha

Câu trả lời:


25

Bắt đầu tự động với ID tiến trình khác có nghĩa là đó là một quy trình khác. Do đó, có một quá trình cha mẹ, theo dõi con cái của nó, và nếu một người chết, nó sẽ được cha mẹ đối xử. Nếu bạn muốn dừng hoàn toàn dịch vụ, hãy tìm hiểu cách dừng quá trình cha mẹ. Giết nó SIGKILLtất nhiên là một trong những lựa chọn, nhưng có lẽ không phải là The Right One TM , vì trình giám sát dịch vụ có thể cần thực hiện một số dọn dẹp để tắt đúng cách.

Để tìm quá trình giám sát, bạn có thể cần kiểm tra toàn bộ danh sách quy trình, vì người nghe thực tế có thể tự tách ra khỏi cha mẹ của họ (thường là bằng cách fork() + setsid()kết hợp). Trong trường hợp này, tôi thấy đầu ra của ps faux( procpsít nhất là, có thể khác nhau đối với các triển khai khác) khá tiện dụng - nó liệt kê tất cả các quy trình trong cây phân cấp. Trừ khi đã có một gói bọc PID (xem thêm wikipedia ), thì bộ điều khiển màn hình phải nhỏ hơn bộ lọc của bất kỳ người nghe nào (trừ khi bạn dĩ nhiên nhấn vào bộ đóng gói PID).


Mẹ của nó là shcó cha mẹ là sudo. Có thể giết chúng không?
Lakshminarayanan Guptha

Cha mẹ của quá trình nào? Người nghe trên cổng 3002? Trong trường hợp đó liệt kê tất cả các quy trình và đoán xem cái nào là màn hình. Với linux procps, tôi thường thấy đầu ra của ps -fauxđủ thông tin. Cũng lưu ý rằng, PID của màn hình phải nhỏ hơn so với PID của người nghe thực tế (trừ khi bạn có hệ thống hoạt động được một thời gian và các PID đã được bao bọc kể từ khi dịch vụ đã được khởi động).
peterph

Tuyệt quá. ps -fauxđã giúp bắt đầu giết chết từ cha mẹ. Bạn có thể vui lòng cập nhật câu trả lời của bạn với giải pháp từ bình luận?
Lakshminarayanan Guptha

Vâng, tôi đã suy nghĩ về nó ... :)
peterph

ps fauxđã giúp phát hiện supervisordcái khởi động lại vô tận đã treo lên daemon hàng đợi của
Laravel

4

Nếu bạn biết cổng nghe của quá trình, bạn có thể sử dụng fuservới -kcờ.

Cái gì đó như,

fuser -k 3002/tcp
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.