Proces zombie

Z Wikipedii, wolnej encyklopedii

Proces zombie – wpis w tablicy procesów opisujący program, którego wykonanie w systemie operacyjnym zostało zakończone, ale którego zamknięcie nie zostało jeszcze obsłużone przez proces rodzica. Termin ten odnosi się zazwyczaj do systemów z rodziny Unix, gdzie pozostawienie wpisu zombie tymczasowo zajmującego pozycję w tablicy procesów zapobiega ponownemu wykorzystaniu danego PID-a i możliwym na skutek tego pomyłkom programistycznym. Wpisy takie nie dają się wyeliminować poleceniem kill, czemu prawdopodobnie zawdzięczają swoją złowrogą nazwę.

Wpis zombie znika po odpowiednim wywołaniu funkcji wait(), waitpid() lub analogicznej przez proces macierzysty. W przypadku zakończenia także procesu rodzica w wielu architekturach pozostawione przez niego zombie są obsługiwane automatycznie przez proces init lub przez system operacyjny. W pierwszym przypadku taki wpis zostaje przypisany jako dziecko procesu init, który następnie wywołuje wait(), eliminując go z tablicy procesów.

Chociaż wpisy zombie nie obciążają znacząco komputera, nieprawidłowo napisany program, który nie obsługuje zakończenia pracy potomków, może doprowadzić do destabilizacji pracy systemu. Dzieje się tak, gdy cała tablica procesów, zwykle posiadająca z góry ograniczony rozmiar, zostanie zajęta przez wpisy zombie.

Hierarchia powiadamiania o procesach zombie może zostać czasowo zmieniona przez mechanizm ptrace(inne języki), czasem prowadząc do utrudnień przy debuggowaniu programów.