Jaki status musi uzyskać proces od procesu nadrzędnego, aby stać się zombie?
sobes.tech AI
Odpowiedź od AI
Proces staje się zombie lub "procesem-duch" gdy kończy swoje wykonanie (przechodzi do stanu EXIT_ZOMBIE), ale wpis o nim w tabeli procesów nadal istnieje, oczekując na odczytanie przez proces rodzica jego statusu zakończenia za pomocą wywołania systemowego wait() lub waitpid(). Do tego momentu, zajmuje minimalne zasoby (praktycznie tylko wpis w tabeli procesów), ale nie zwalnia w pełni powiązanych z nim zasobów.
W tabeli procesów taki proces jest zwykle wyświetlany z wskaźnikiem <defunct>.
# Przykład wyjścia polecenia ps, pokazującego proces zombie
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
...
someuser 1234 0.0 0.0 0 0 pts/0 Z+ 10:00 0:00 [defunct_process]
...
Aby zombi proces zniknął, proces rodzicielski musi wywołać wait() lub waitpid(). Jeśli proces rodzicielski zakończy się przed odczytaniem statusu swoich zombi dzieci, te dzieci przechodzą pod opiekę procesu init (z ID 1), który automatycznie wywołuje wait() dla swoich procesów potomnych, tym samym usuwając zombie.
W ten sposób, główny stan, który proces otrzymuje od procesu rodzica, aby stać się zombie, to stan zakończenia, który rodzic jeszcze nie obsłużył przez wywołania wait*.