Czy powinienem zabić proces zombie w moim systemie?

20

Ponieważ jestem nowicjuszem w systemach Linux / Unix i czytam o procesach zombie , mam jedno pytanie. Mam ich teraz 10. Czy muszę je zabić, a jeśli tak, dlaczego? Czy są obciążeniem dla mojego systemu?

592 processes: 581 sleeping, 1 running, 10 zombie, 0 stopped
Jason Paddle
źródło
25
Nie musisz ich zabijać. Oni już nie żyją.
Marco
2
Więc nie ładują już mojego systemu. I tak pozostaną, dopóki nie uruchomię ponownie systemu lub nie zabiję ich, prawda?
Jason Paddle,
7
@Marco: Nie możesz zabić tego, co już nie żyje. Ale możesz zabić jego rodziców, harrharr!
wullxz
7
Problem polega na tym, że ich rodzic ich nie zebrał (kiedy umarli).
ypercubeᵀᴹ
3
10 zombie ??? Jesteś zarażony! Uruchom Jason, biegnij.
Luc M

Odpowiedzi:

29

Nie możesz zabić zombie, jest już martwy.

Zasoby tego procesu są bezpłatne i dostępne dla innych procesów. Pozostaje wpis w tabeli procesów. Nie ma to wpływu na wydajność, nie martw się.

Marco
źródło
Tak, to ma sens. Mogę zabić proces nadrzędny. Dziękuję za informację. Chciałem tylko wiedzieć, czy system się ładuje, czy nie.
Jason Paddle,
Uważam jednak, że istnieje limit zombie. Myślę, że ma 1024, więc nie zaszkodzi to wydajności, ale myślę, że jest limit na liczbę, którą możesz mieć.
ProfessionalAmateur
@ProfessionalAmateur Co się stanie, jeśli osiągniesz limit zombie (1024 lub cokolwiek innego)?
Roddy of the Frozen Peas
@RoddyoftheFrozenPeas - Szczerze mówiąc Nie jestem pewien, zawsze je wyczyściłem przed przejściem do tego punktu. Wyobrażam sobie, że system spróbuje stworzyć kolejnego zombie i być może naruszył pamięć lub jakiś inny twardy błąd, przepełnienie lub błąd segmentacji.
ProfessionalAmateur
2
@ProfessionalAmateur: W Linuksie nie ma limitu zombie . Identyfikatory PID zombie podlegają /proc/sys/kernel/pid_max, tak jak każdy inny identyfikator PID.
rsaw
16

Jakie są te procesy zombie, które pojawiają się w ps? Zabijam ich, ale nie odchodzą!

Zombie to martwe procesy. Nie możesz zabijać zmarłych. Wszystkie procesy w końcu umierają, a kiedy to robią, stają się zombie. Nie zużywają prawie żadnych zasobów, czego należy się spodziewać, ponieważ nie żyją! Powodem zombie jest to, że rodzic (proces) zombie może pobrać status wyjścia zombie i statystyki wykorzystania zasobów. Rodzic sygnalizuje systemowi operacyjnemu, że nie potrzebuje już zombie za pomocą jednego z wywołań systemowych wait ().

Kiedy proces umiera, wszystkie jego procesy potomne stają się potomkami procesu nr 1, który jest procesem inicjującym. Init zawsze czeka na śmierć dzieci, aby nie pozostały jak zombie.

Jeśli masz procesy zombie, oznacza to, że ich zombie nie czekały na ich rodziców (spójrz na PPID wyświetlany przez ps -l). Masz trzy możliwości: Napraw proces nadrzędny (poczekaj); zabić rodzica; lub z tym żyć. Pamiętaj, że życie z nim nie jest takie trudne, ponieważ zombie zajmują niewiele więcej niż jedną dodatkową linię w wynikach ps.

Źródło: http://www.linuxsa.org.au/tips/zombies.html

A jeśli masz ochotę na zabójstwo, ten wątek superużytkownika może być dla Ciebie interesujący: Jak znaleźć proces macierzysty procesu zombie?

wullxz
źródło
Zauważ, że ustalenie rodzica może być przesadą - może po prostu nie trzeba jeszcze czekać na dzieci. Może zrobi to później (lub tak, może nie).
Romain
tak, masz rację. Odpowiedź na pytanie, które połączyłem, mówi, jak określić proces nadrzędny. Zawsze masz szansę sprawdzić, które procesy tworzą zombie i zdecydować, czy konieczne jest utrzymanie go.
wullxz
7

Nie musisz ich zabijać.

Aby uzyskać podstawowe zrozumienie:

Każdy proces jest potomkiem procesu nadrzędnego (z wyjątkiem procesu init, ale nie musimy się tym martwić).

Gdy proces potomny kończy wykonywanie, może nadal zawierać dane, do których proces macierzysty chce uzyskać dostęp, zwykle kod wyjścia opisujący wynik procesu potomnego (Czy to się udało? Czy to błąd? Jaki był kod błędu?).

Gotowy proces potomny pozostaje w tabeli procesów jako proces zombie, dopóki proces nadrzędny nie „zbierze” lub nie zaczeka na procesie potomnym, który jest po prostu procesem nadrzędnym informującym system operacyjny, że nie potrzebuje już tego procesu potomnego; Odczytuje wszystkie zwracane wartości, które chce i jest z tym zrobiony. W tym momencie system wyczyści wpis w tabeli procesów.

Darth Android
źródło
3

Ten proces nie musi być zabity.

Na wszelki wypadek, jeśli chcesz go zabić (z dowolnego powodu), strzelaj w głowę, oto przydatne polecenie:

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

Od https://www.erianna.com/kill-a-linux-zombie-process

Datageek
źródło
1
+1 dla shoot at the head.
BenjiWiebe