Tôi có nên tiêu diệt quá trình zombie trong hệ thống của mình không?


20

Vì tôi là người mới trong các hệ thống Linux / Unix và chỉ đọc về các quy trình zombie , tôi có một câu hỏi. Tôi có 10 người trong số họ ngay bây giờ. Tôi có cần phải giết chúng không và nếu có, tại sao? Có phải họ là một tải trên hệ thống của tôi?

592 processes: 581 sleeping, 1 running, 10 zombie, 0 stopped

25
Không cần phải giết chúng. Họ đã chết.
Marco

2
Vì vậy, họ không tải hệ thống của tôi nữa. Và họ sẽ vẫn như thế cho đến khi tôi khởi động lại hệ thống hoặc tôi giết chúng, phải không?
Jason Paddle

7
@Marco: Bạn không thể giết những gì đã chết. Nhưng bạn có thể giết cha mẹ của nó, harrharr!
wullxz

7
Vấn đề là cha mẹ của họ đã không gặt hái được chúng (khi họ chết).
ypercubeᵀᴹ

3
10 thây ma ??? Bạn bị nhiễm khuẩn! Chạy Jason chạy.
Luc M

Câu trả lời:


29

Bạn không thể giết một zombie, nó đã chết.

Các tài nguyên của quy trình đó là miễn phí và có sẵn cho các quy trình khác. Những gì còn lại là một mục trong bảng quy trình. Điều này không có ảnh hưởng đến hiệu suất, đừng lo lắng.


Vâng, điều này có ý nghĩa. Tôi có thể giết quá trình cha mẹ. Cảm ơn bạn đã thông tin. Tôi chỉ muốn biết nếu họ tải hoặc không có hệ thống.
Jason Paddle

Tôi tin rằng có một giới hạn của zombie mặc dù. Tôi nghĩ nó là 1024, vì vậy nó sẽ không ảnh hưởng đến hiệu suất nhưng tôi nghĩ có một mức trần trên con số bạn có thể có.
ProfessionalAm Nghiệp

@Prof ProfessionAm Nghiệp vụ Điều gì xảy ra nếu bạn đạt giới hạn zombie (1024 hoặc bất cứ điều gì)?
Roddy of the Frozen Peas

@RoddyoftheF FrozenPeas - Thành thật mà nói Tôi không chắc chắn, Ive luôn dọn dẹp chúng trước khi đến điểm đó. Tôi tưởng tượng hệ thống sẽ cố gắng tạo ra một zombie khác và có thể có vi phạm bộ nhớ hoặc một số lỗi cứng, lỗi tràn hoặc lỗi phân đoạn nào đó.
ProfessionalAm Nghiệp

2
@Prof ProfessionAm Nghiệp dư: Không có giới hạn zombie trong linux. Zombie Zombie phải tuân theo /proc/sys/kernel/pid_max, giống như mọi PID khác.
rsaw

16

Những quá trình zombie xuất hiện trong ps là gì? Tôi giết chúng nhưng chúng không biến mất!

Zombie là quá trình chết. Bạn không thể giết người chết. Tất cả các quá trình cuối cùng sẽ chết, và khi chúng làm chúng trở thành zombie. Họ tiêu thụ gần như không có tài nguyên, đó là điều được mong đợi bởi vì họ đã chết! Lý do cho zombie là vì cha mẹ (quá trình) của zombie có thể truy xuất trạng thái thoát của zombie và thống kê sử dụng tài nguyên. Phụ huynh báo hiệu cho hệ điều hành rằng nó không còn cần zombie bằng cách sử dụng một trong các lệnh gọi hệ thống Wait ().

Khi một tiến trình chết, tất cả các tiến trình con của nó trở thành con của tiến trình số 1, đó là tiến trình init. Ban đầu luôn chờ đợi trẻ em chết, để chúng không còn là thây ma.

Nếu bạn có quy trình zombie, điều đó có nghĩa là những thây ma đó không được cha mẹ của chúng chờ đợi (hãy xem PPID được hiển thị bởi ps -l). Bạn có ba lựa chọn: Khắc phục quy trình cha mẹ (làm cho nó chờ); giết cha mẹ; hoặc sống với nó. Hãy nhớ rằng sống với nó không quá khó vì zombie chiếm ít hơn một dòng phụ trong đầu ra của ps.

Nguồn: http://www.linuxsa.org.au/tips/zombie.html

Và trong trường hợp bạn đang giết người, chủ đề siêu người dùng này có thể thú vị với bạn: Làm thế nào để bạn tìm thấy quy trình cha mẹ của một quá trình zombie?


Lưu ý rằng việc sửa lỗi cha mẹ có thể là quá mức cần thiết - có thể nó chưa đến mức phải chờ đợi con cái. Có lẽ nó sẽ làm điều đó sau này (hoặc có, có thể nó sẽ không).
Romain

Vâng bạn đã đúng. Câu trả lời của câu hỏi tôi liên kết cho bạn biết cách xác định quy trình cha mẹ. Vì vậy, bạn luôn có cơ hội kiểm tra quá trình nào tạo ra thây ma và quyết định xem có cần thiết để duy trì hoạt động không.
wullxz

7

Bạn không cần phải giết chúng.

Để xây dựng một số hiểu biết cơ bản:

Mọi quy trình đều là con của quy trình cha mẹ (ngoại trừ quy trình init, nhưng chúng ta không cần phải lo lắng về điều đó).

Khi một tiến trình con kết thúc thực thi, nó vẫn có thể chứa dữ liệu mà tiến trình cha mẹ muốn truy cập, thường là một mã thoát mô tả kết quả của tiến trình con (Đã thành công? Có phải lỗi không? Mã lỗi là gì?).

Một tiến trình con đã hoàn thành treo xung quanh trong bảng quy trình như là một tiến trình zombie cho đến khi tiến trình cha mẹ "gặt hái" hoặc chờ đợi tiến trình con, đơn giản là tiến trình cha mẹ nói với HĐH rằng nó không cần tiến trình con đó nữa; Nó đã đọc bất kỳ giá trị trả về nào nó muốn và được thực hiện với nó. Tại thời điểm này, hệ thống sẽ dọn sạch mục trong bảng quy trình.


3

Quá trình này không cần phải bị giết.

Chỉ trong trường hợp bạn muốn giết nó bằng mọi cách (vì bất kỳ lý do gì), hãy chắc chắn rằng bạn bắn vào đầu, đây là một lệnh hữu ích:

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

Từ https://www.erianna.com/kill-a-linux-zombie- Process


1
+1 cho shoot at the head.
BenjiWiebe
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.