Dzięki poleceniom takim jak top
i opartym na GUI System Monitor
widzę, ż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?
Odpowiedzi:
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:
Zagłada jest najczęściej stosowaną techniką; w tym przypadku proces osierocony zostaje zabity.
Reinkarnacja to technika, w której maszyny okresowo próbują zlokalizować rodziców dowolnych zdalnych obliczeń; w którym momencie zabija się osierocone procesy.
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
źródło
init
wzywawait
wszystkie swoje procesy potomne, czy to zombie, osierocone (adoptowane) i biologiczne (samoistnie)?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żeszcat /proc/sys/kernel/threads-max
sprawdzić, ile wpisów jest dozwolonych w twoim systemie).Pojawiają się tylko wtedy, gdy ich proces nadrzędny (tj. Proces, który
fork()'ed
one) żyją, ale jeszcze nie wywołał funkcjiwait()
systemowej. Gdy rodzic umiera, zombie sąwait()'ed
na miejscuinit
i znikają.źródło
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.Kiedy
child process
kończy się, jego śmierć zostaje zakomunikowana rodzicowi, aby rodzic mógł podjąć odpowiednie działania.Proces,
process
który czeka, aż jego rodzic zaakceptuje kod powrotu, nazywa się procesem zombie .Mają,
completed their execution
ale nadal maentry
wprocess table
.źródło
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
źródło