Halloween trên Linux: cách tiêu diệt các quy trình zombie

tem halloween

Ngày của người chết sắp đến và đó là lý do tại sao chúng tôi muốn thực hiện hướng dẫn nhỏ này từ LxA để nói về quy trình zombie và làm thế nào chúng ta có thể giết chúng. Điều đầu tiên cần nói là quy trình zombie là gì, và như bạn đã biết, hạt nhân Linux có một hệ thống con để quản lý các quy trình và làm việc với bộ lập lịch để tạo, thay đổi mức độ ưu tiên, gửi hoặc xóa luồng xử lý CPU và tiêu diệt các quá trình. Chà, phần này của hạt nhân, giống như phần còn lại của các hệ thống giống Unix, phân biệt giữa các trạng thái khác nhau của các tiến trình ...

Vì vậy, chúng tôi có thể thấy rằng một tiến trình nó có thể ở trạng thái ngủ (S), tức là ngủ. Ngoài ra các tiến trình đang ở trạng thái đang chạy (R) là các tiến trình hiện đang chạy hoặc đang chạy, các tiến trình đang chờ (D) đang dừng chờ được tham gia, cử chỉ (T) hoặc bị treo, và cả các thây ma (Z) hoặc đã chết. Quá trình xác sống hoặc quá trình chết là một quá trình đã được kết thúc thành công, nhưng có một số tài nguyên hệ thống nhất định bị chiếm đoạt vì Linux vẫn đang lưu nó trong bảng quá trình. Bạn đã biết rằng khi một tiến trình kết thúc, nó sẽ không ở trạng thái này mà sẽ hoàn thành và hạt nhân giải phóng tài nguyên để các tiến trình khác có thể sử dụng chúng, về cơ bản nó sẽ giải phóng bộ nhớ RAM bị chiếm dụng ...

Chà, vì không có gì thú vị khi có loại quy trình zombie này, mặc dù chúng không thường xuyên, chúng ta có thể tìm kiếm và loại bỏ chúng như được chỉ ra ở đây. Điều đầu tiên là tìm xem có các quy trình zombie trong bản phân phối của chúng tôi hay không và vì điều đó, chúng tôi có thể tự giúp mình các công cụ như top hoặc like ps. Ví dụ: một trong hai tùy chọn sau:

ps -el | grep 'Z'

ps aux | grep defunct

Và sau khi được phát hiện, chúng tôi có thể giết nó trực tiếp với:

kill -HUP `ps -A -ostat,ppid,pid,cmd | grep -e ‘^[Zz]’ | awk ‘{print $2}’`

Mặc dù một giải pháp thay thế khác là tìm các quy trình mẹ, vì tiêu diệt một quá trình thây ma Bạn phải giết các quy trình mẹ duy trì nó, như bạn có thể đã suy luận:

ps -eo pid,ppid | grep <PID>

kill -9 <PPID>

Bạn sẽ phải thay thế bằng ID của tiến trình zombie mà bạn đã tìm thấy và để tiêu diệt nó bằng cách tiêu diệt, hãy sử dụng ID của tiến trình mẹ thay thế trong ví dụ, rõ ràng.