Jakie są procesy zombie?


138

Dzięki poleceniom takim jak topi opartym na GUI System Monitorwidzę, że w tej chwili mam kilka procesów zombie.

Jakie są procesy zombie?

Czy wpływają one na wydajność systemu lub aplikacji, do której są zombie. Czy używają zbyt dużo pamięci, czy w ogóle pamięci?


39
Są to procesy, które chcą zjeść Twój procesor;)
Luis Alvarado,

8
na lunch ... :)
RolandiXor

3
Te procesy są martwe, ale nie zakopane.
Prateek Joshi

2
Zjedz mój procesor ?! To naprawdę przerażające!
Håvard Geithus

Odpowiedzi:


162

Zombie są procesami MARTWYMI. Nie mogą być „zabijaniem” (nie możesz zabić ŚMIERTELNIKA). 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.

Zombie można zidentyfikować w danych wyjściowych komendy ps w systemie Unix przez obecność „Z” w kolumnie STAT. Zombie, które istnieją dłużej niż przez krótki okres czasu, zwykle wskazują na błąd w programie nadrzędnym. Podobnie jak w przypadku innych wycieków, obecność kilku zombie sama w sobie nie jest niepokojąca, ale może wskazywać na problem, który mógłby narastać pod cięższymi obciążeniami.

Aby usunąć zombie z systemu, sygnał SIGCHLD można wysłać do rodzica ręcznie, używając polecenia kill. Jeśli proces nadrzędny nadal odmawia zebrania zombie, następnym krokiem byłoby usunięcie procesu nadrzędnego. Kiedy proces traci swojego rodzica, init staje się jego nowym rodzicem. Init okresowo wykonuje wywołanie systemowe wait, aby czerpać zombie z init jako rodzicem.

Istnieją również procesy osierocone, które są procesami komputerowymi, których proces nadrzędny został zakończony lub zakończony.

Proces może zostać osierocony podczas zdalnego wywoływania, gdy proces klienta ulega awarii po zgłoszeniu żądania przez serwer.

Sieroty marnują zasoby serwera i mogą potencjalnie narazić serwer na kłopoty (jest to największa różnica w zasobach między zombie a sierotami (z wyjątkiem filmów o sierocych zombie). Istnieje jednak kilka rozwiązań problemu z procesem osieroconym:

  1. Zagłada jest najczęściej stosowaną techniką; w tym przypadku proces osierocony zostaje zabity.

  2. Reinkarnacja to technika, w której maszyny okresowo próbują zlokalizować rodziców dowolnych zdalnych obliczeń; w którym momencie zabija się osierocone procesy.

  3. Wygaśnięcie to technika, w której każdy proces ma określoną ilość czasu na zakończenie, zanim zostanie zabity. W razie potrzeby proces może „poprosić” o więcej czasu na zakończenie, zanim upłynie wyznaczony czas.

Proces można także osierocić na tym samym komputerze, co proces nadrzędny. W systemie operacyjnym typu UNIX każdy osierocony proces zostanie natychmiast przyjęty przez specjalny proces systemowy „init”. Ta operacja nazywa się ponownym rodzicielstwem i odbywa się automatycznie. Chociaż technicznie proces ma proces „init” jako jego rodzic, nadal jest nazywany procesem osieroconym, ponieważ proces, który go pierwotnie utworzył, już nie istnieje.

Więcej informacji:

http://wiki.answers.com/Q/What_is_Zombie_Process_and_Orphan_Process#ixzz1PCN9vojU

http://www.linuxsa.org.au/tips/zombies.html

http://www.brighthub.com/computing/linux/articles/79186.aspx

Jak rozpoznać i zabić proces zawieszania, gdy system zawiesza się i reaguje powoli na dane wprowadzone przez użytkownika?

Zdalne zabicie uruchomionego procesu na komputerze Ubuntu z komputera z systemem Windows, który znajduje się w sieci LAN


18
Ekhm! MOŻESZ zabijać zmarłych! Musisz tylko celować w głowę. A może cały czas nas okłamywali?
Marcin Kamiński

1
initwzywa waitwszystkie swoje procesy potomne, czy to zombie, osierocone (adoptowane) i biologiczne (samoistnie)?
Bleeding Fingers

1
zgodnie z do World War Z użyj kamuflażu: P
عثمان غني

Proszę o medal @MarcinKamiński!
Andrea,

20

Procesy zombie (również pokazują się jako <defunct>), wcale nie są prawdziwymi procesami. Są to tylko wpisy w tabeli procesów jądra. To jedyny zasób, który zużywają. Nie zużywają żadnego procesora ani pamięci RAM. Jedynym niebezpieczeństwem posiadania zombie jest brak miejsca w tabeli procesów (możesz cat /proc/sys/kernel/threads-maxsprawdzić, ile wpisów jest dozwolonych w twoim systemie).

Pojawiają się tylko wtedy, gdy ich proces nadrzędny (tj. Proces, który fork()'edone) żyją, ale jeszcze nie wywołał funkcji wait()systemowej. Gdy rodzic umiera, zombie są wait()'edna miejscu initi znikają.


4
top`Zrzut ekranu w tej kwestii wydaje się sprzeczne z was? Tam wydaje się, że zombie używa 100% 1 procesora, ale nie ma pamięci.
Torben Gundtofte-Bruun

7

Kiedy child processkończy się, jego śmierć zostaje zakomunikowana rodzicowi, aby rodzic mógł podjąć odpowiednie działania.

Proces, processktóry czeka, aż jego rodzic zaakceptuje kod powrotu, nazywa się procesem zombie .

Mają, completed their executionale nadal ma entryw process table.


1

Procesy zombie to procesy, które przestały działać, ale ich pozycja w tabeli procesów wciąż istnieje, ponieważ proces nadrzędny nie odzyskał jej za pośrednictwem wywołania systemowego oczekiwania. Technicznie każdy zakończony proces jest zombie przez bardzo krótki czas, ale może żyć dłużej.

Dłużej żyjące procesy zombie występują, gdy procesy nadrzędne nie wywołują wywołania systemowego oczekiwania po zakończeniu procesu potomnego. Jedną z takich sytuacji jest sytuacja, gdy proces nadrzędny jest źle napisany i po prostu pomija połączenie oczekujące lub gdy proces nadrzędny umiera przed dzieckiem, a nowy proces nadrzędny nie wywołuje na nim oczekiwania. Kiedy rodzic procesu umiera przed dzieckiem, system operacyjny przypisuje proces potomny do procesu „init” lub PID 1. tzn. Proces init „adoptuje” proces potomny i staje się jego rodzicem. Oznacza to, że teraz, gdy proces potomny kończy pracę, nowy rodzic (init) musi wywołać kelnera, aby otrzymać kod wyjścia, lub pozycja tablicy procesów pozostaje na zawsze i staje się zombie

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.