Skip to main content

Co to jest proces zombie?

Proces zombie to wystąpienie programu komputerowego, który zachowuje rekord tabeli procesów, mimo że zakończył wykonywanie.Takie nieistniejące procesy są zwykle powiązane z UNIX i Reg;i inne podobne systemy operacyjne ze względu na sposób obsługi procesów dzieci.Po zakończeniu procesu dziecka rodzic jest zazwyczaj odpowiedzialny za usunięcie go z tabeli procesów.Zwykle nie jest możliwe bezpośrednie usunięcie procesu zombie za pomocą polecenia zabójstwa, chociaż rodzica można często wykonać, aby go usunąć, jeśli operator użyje powiadomienia Signal Child (SIGCHLD).Niepowodzenie, proces zombie może zostać usunięty pośrednio, zabijając rodzica.

Proces zombie jest metaforycznym opisowym terminem, który odnosi się do żywych zmarłych.Nieistniejące procesy w UNIX Podobne systemy operacyjne mogą być postrzegane jako analogiczne do zombie, ponieważ utrzymują one obecność tabeli procesowej, mimo że nie wykonują już ich zamierzonych funkcji.Po zakończeniu procesu, które czasami mówi się, że umarł, podczas gdy środki, w których system operacyjny odzyskuje przydział tabeli procesów, może być znany jako zbieranie.Proces macierzysty zombie ma technicznie czerpać swoje dzieci, choć nie zawsze tak się dzieje.

Istnieją pewne przypadki, w których istnienie procesu zombie może być celowe, a nawet pożądane.Po zakończeniu procesu potomnego rodzica może później uruchomić kolejną instancję tego samego programu.Jeśli zombie nie zostało usunięte z tabeli procesu, nowe dziecko nie zostanie przypisane takiej samej identyfikacji (ID) co stare dziecko.Niektóre programy mogą skorzystać z tego rodzaju różnicowania, a nawet wymagać tego rodzaju różnicowania.

Jeśli proces nadrzędny nie wykonał polecenia oczekiwania na zombie, za które jest odpowiedzialny, może być możliwe wymuszenie problemu.Zazwyczaj odbywa się to za pomocą polecenia Kill i wysyłania sygnału Sigchld do procesu nadrzędnego.Jeśli wszystko działa poprawnie, proces nadrzędny, który odbiera ten sygnał, powinien czerpać swoje dzieci zombie, aby ich identyfikatory i pozycje tabeli procesów mogły zostać ponownie wykorzystane.

W pewnych okolicznościach proces nadrzędny może zignorować sygnał SIGCHLD.Jeśli tak się stanie, a operator nadal pragnie wyczyszczenia tabeli procesu, proces nadrzędny może zostać zabity.Wszelkie zombie, które utworzył proces nadrzędny, zostaną następnie przypisane jako dzieci do procesu init.Ponieważ init okresowo inicjuje polecenie oczekiwania na swoje dzieci, wszelkie zombie, za które jest odpowiedzialny, zostaną ostatecznie usunięte z tabeli procesów.