Làm thế nào để giết các tiến trình không phản hồi để giết -9


9

Tôi đang thấy các quy trình trên SGI Altix 450 đang chạy SLES 10.1 của tôi dường như ngừng chạy (nghĩa là không cung cấp thêm đầu ra trong nhật ký của họ trong nhiều giờ). Tại thời điểm này tôi muốn giết quá trình vi phạm để tôi có thể khởi động lại nó. Top cho thấy quá trình ở trạng thái (R). Mặc dù khi tôi cố giết nó thì không có gì xảy ra. Ngay cả khi tôi sử dụng kill -9, nó vẫn còn lưu lại. Trong trường hợp này tôi có thể làm gì ngoài khởi động lại máy?


2
Họ chắc chắn là cùng một quá trình id? Không phải là bạn đang giết quá trình và một số daemon đang khởi chạy lại một tiến trình có cùng tên?
CK.

Câu trả lời:


9

Có thể quá trình đó bị giết nhưng chờ cha mẹ thu thập giá trị trả về của nó. Trong trường hợp đó sau khi bị giết, nó sẽ ở trạng thái 'Z' chứ không phải 'R'. Trong trường hợp đó, bạn cũng sẽ tìm thấy ppidtiến trình bằng cách sử dụng pslệnh và giết tiến trình cha mẹ (Nếu bạn thực sự chắc chắn nó sẽ không gây ra bất kỳ vấn đề nào).

Trường hợp khác có thể là vì một số lý do quá trình đang khởi động lại sau khi bị giết như tty. Trong trường hợp đó, id tiến trình sẽ thay đổi mỗi khi bạn giết -9. Xem nếu ID tiến trình thay đổi mỗi khi bạn cố gắng giết nó.


Tôi tin rằng tôi đang cố gắng để giết quá trình cha mẹ. Đó là quá trình cha mẹ ở trạng thái (R). pstree xác nhận điều này. Các tiến trình con là tất cả trong trạng thái zombie (Z). Các ppid giữ tĩnh, do đó tôi không tin rằng nó chỉ đơn giản là khởi động lại.
Jared Brown

Nếu bạn giết tiến trình cha mẹ (và tiến trình cha mẹ của nó, v.v.) thì init sẽ trở thành cha mẹ của các tiến trình con ở trạng thái 'Z' và thu thập giá trị trả về của chúng. Vì vậy, cách tốt nhất để loại bỏ những đứa trẻ 'Z' có cha mẹ không lấy giá trị trả về của chúng là giết cả cha mẹ để init trở thành cha mẹ của các tiến trình con đã chết.
Saurabh Barjatiya

Đây là vấn đề mà tôi đang gặp phải. Gửi tín hiệu -9 qua kill cho tiến trình cha không kết thúc nó.
Jared Brown

1
Gửi SIGHUP cho cha mẹ đôi khi là đủ. Bạn không phải luôn luôn giết cha mẹ.
Thomas

2
Tôi xin lỗi, SIGCHLD. (quá sớm vào buổi sáng)
Thomas

2

Quá trình đang chờ trên một số tài nguyên hệ thống, có lẽ là NFS? điều đó không cho phép nó 'buông tay'. Rất thích nghe một số giải pháp cho vấn đề này ngoài tôi ...

khởi động lại hộp, hoặc để quá trình ngồi xung quanh.

Tôi tự hỏi nếu bạn có thể 'DỪNG' quá trình thông qua kill -STOP {PID} để ngăn nó tiêu thụ nhiều cpu hơn.

Khởi động lại nó có thể ngay cả với một quá trình dừng khác đang diễn ra, nhưng nó có thể yêu cầu một cổng danh sách hoặc phân đoạn bộ nhớ dùng chung vẫn còn được sử dụng bởi quy trình khác.


1
Không phải là một quá trình đang chờ trên NFS hoặc một số chức năng I / O để hoàn thành ở trạng thái (D)? Các quá trình này ở trạng thái (R).
Jared Brown

Đây chính xác là những gì đang xảy ra với tôi đôi khi khi tôi thực hiện lslệnh trên mount s3fs. Các lsquá trình sẽ không giết ngay cả với kill -9cho đến khi tôi buộc unmount vớiumount -l
Marco Marsala

0

Bạn đã kiểm tra dmesg chưa? Tôi đã thấy điều này sau khi hoảng loạn hạt nhân; cách duy nhất để khôi phục là khởi động lại (tốt nhất là sớm) - và sau đó lấy kernel đã vá.

Các quy trình không thể bình thường sẽ ở trạng thái D, không phải R.


Có thể làm bất cứ điều gì về trạng thái D chết các quá trình cứng ngoài việc khởi động lại không? ppid = 1
Giáo sư Moriarty
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.