Sobes.tech
Middle

Jaký stav musí proces získat od rodičovského procesu, aby se stal zombie?

sobes.tech AI

Odpověď od AI

Proces se stává zombie nebo "duchovým procesem", když dokončí svou činnost (přejde do stavu EXIT_ZOMBIE), ale jeho záznam v tabulce procesů stále existuje, čekající na to, až jeho rodičovský proces přečte jeho stav ukončení pomocí systémového volání wait() nebo waitpid(). Do té doby zabírá minimální zdroje (prakticky jen záznam v tabulce procesů), ale úplně neuvolňuje s ním spojené zdroje.

V tabulce procesů je takový proces obvykle zobrazen s ukazatelem <defunct>.

# Příklad výstupu příkazu ps, ukazujícího zombie proces
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 zombie proces zmizel, musí rodičovský proces zavolat wait() nebo waitpid(). Pokud rodičovský proces skončí dříve, než přečte stav svých zombie dětí, tyto děti přejdou pod správu procesu init (s ID 1), který automaticky volá wait() pro své potomky, čímž zombie odstraňuje.

Hlavní stav, který proces od rodiče obdrží, aby se stal zombie, je stav ukončení, který rodič ještě nezpracoval pomocí volání wait*.