Co to jest proces zombie?
Proces zombie jest instancją programu komputerowego, który zachowuje rekord tabeli procesów pomimo zakończenia wykonywania. Takie nieistniejące procesy są zwykle kojarzone z Unixem i innymi podobnymi systemami operacyjnymi ze względu na sposób, w jaki obsługują procesy potomne. Po zakończeniu wykonywania procesu potomnego 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 kill, chociaż rodzic często może zostać zmuszony do usunięcia go, jeśli operator użyje powiadomienia potomnego (SIGCHLD). W przeciwnym razie proces zombie można usunąć pośrednio, zabijając rodzica.
Proces zombie to metaforyczny opisowy termin odnoszący się do żywych trupów. Niedziałające procesy w Unix® i podobnych systemach operacyjnych można postrzegać jako analogiczne do zombie, ponieważ utrzymują one obecność tabeli procesów, mimo że nie wykonują już zamierzonych funkcji. Kiedy proces się zakończy, mówi się czasem, że umarł, podczas gdy środki, za pomocą których system operacyjny odzyskuje swoje przydziały tabeli procesów, mogą być znane jako zbieranie. Proces rodzicielski zombie technicznie powinien zbierać swoje dzieci, chociaż nie zawsze tak się dzieje.
Istnieją pewne przypadki, w których istnienie procesu zombie może być celowe lub nawet pożądane. Po zakończeniu wykonywania procesu potomnego rodzic może być zmuszony później uruchomić inną instancję tego samego programu. Jeśli zombie nie zostanie usunięty z tabeli procesów, nowe dziecko nie otrzyma tego samego identyfikatora (ID) co stare dziecko. Niektóre programy mogą korzystać z tego rodzaju różnicowania lub nawet wymagać takiego zróżnicowania.
Jeśli proces nadrzędny nie wykonał polecenia czekania, aby zebrać zombie, za które jest odpowiedzialny, może być możliwe wymuszenie problemu. Zazwyczaj odbywa się to za pomocą polecenia kill i wysłania sygnału SIGCHLD do procesu nadrzędnego. Jeśli wszystko działa poprawnie, proces nadrzędny, który odbiera ten sygnał, powinien zebrać swoje dzieci-zombie, aby ich identyfikatory i pozycje w tabeli procesów mogły być ponownie użyte.
W pewnych okolicznościach proces nadrzędny może zignorować sygnał SIGCHLD. Jeśli tak się stanie, a operator nadal chce wyczyszczenia tabeli procesów, proces nadrzędny może zostać zabity. Wszelkie zombie utworzone przez proces nadrzędny zostaną wówczas przypisane jako dzieci do procesu init. Ponieważ init okresowo inicjuje polecenie potomne na swoich dzieciach, wszelkie zombie, za które jest odpowiedzialny, zostaną ostatecznie usunięte z tabeli procesów.