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