Sobes.tech
Middle

Milyen státuszt kell kapnia egy folyamatnak a szülőfolyamatától, hogy zombivá váljon?

sobes.tech MI

Válasz az MI-től

A folyamat zombi vagy "kísérteties folyamat" lesz, amikor befejezi végrehajtását (átmegy az EXIT_ZOMBIE állapotba), de a folyamat táblában még mindig létezik, várva, hogy a szülőfolyamat olvassa ki a befejezési állapotát a wait() vagy waitpid() rendszerhívással. Eddig minimális erőforrást foglal (szinte csak a folyamat táblában lévő bejegyzést), de nem szabadítja fel teljesen a vele kapcsolatos erőforrásokat.

A folyamat táblában általában <defunct> jelzővel jelenik meg.

# A ps parancs kimenete, zombifolyamatot mutat
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]
...

A zombifolyamat eltűnéséhez a szülőfolyamatnak wait() vagy waitpid()-t kell hívnia. Ha a szülőfolyamat a zombi gyermekek állapotának kiolvasása előtt befejezi, ezek a gyermekek az init (ID 1) folyamat gyermekeivé válnak, amely automatikusan meghívja a wait()-t, így tisztítva a zombikat.

Így a fő állapot, amit a folyamat a szülőtől kap, hogy zombivá váljon, a befejezési állapot, amit a szülő még nem dolgozott fel a wait* hívásokkal.