Co to jest proces zombie?
Proces zombie to przypadek programu komputerowego, który zachowuje rekord tabeli procesów, mimo że zakończył wykonywanie. Takie procesy, takie jak te, są zwykle powiązane z UNIX® i innymi podobnymi systemami operacyjnymi ze względu na sposób obsługi procesów dziecięcych. 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żna usunąć pośrednio, zabijając rodzica.
Proces zombie jest metaforycznym opisowym terminem, który odnosi się do żywych zmarłych. Niewystarczające procesy w UNIX® i podobnych systemach operacyjnych mogą być postrzegane jako analogiczne do zombie, ponieważ utrzymują obecność tabeli procesów, mimo że nie wykonują już ich zamierzonych funkcji. Po zakończeniu procesu eXeciting 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 czerpanie swoich dzieci, choć nie zawsze tak się dzieje.
Są pewne przypadki, w których istnienie procesu zombie może być zamierzone, 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 Wait, aby czerpać zombie, za które jest odpowiedzialny, może być możliwe wymuszenie problemu. Zwykle odbywa się to za pomocą polecenia zabójcy i wysyłania sigchldsygnał do procesu nadrzędnego. Jeśli wszystko działa prawidłowo, proces nadrzędny, który odbiera ten sygnał, powinien czerpać dzieci zombie, aby ich identyfikatory i pozycje tabeli procesów mogły zostać ponownie wykorzystywane.
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 odpowiada, zostaną ostatecznie usunięte z tabeli procesów.