Sobes.tech
Middle

Millist staatust peab protsess saama vanemprotsessilt, et saada zombieks?

sobes.tech AI

Vastus AI-lt

Protsess muutub zombie-ks või "vaimprotsessiks", kui ta lõpetab oma täitmise (läheb EXIT_ZOMBIE olekusse), kuid tema kirje protsesside tabelis on endiselt olemas, oodates, kuni tema vanemprotsess loeb tema lõpetamise staatuse süsteemikutsumise wait() või waitpid() kaudu. Selleks ajaks kasutab ta minimaalseid ressursse (peaaegu ainult kirjet protsesside tabelis), kuid ei vabasta täielikult sellega seotud ressursse.

Selline protsess on tavaliselt protsesside tabelis näidatud indikaatoriga <defunct>.

# ps käsu näide, mis näitab zombie-protsessi
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]
...

Zombie-protsessi kadumiseks peab vanemprotsess kutsuma wait() või waitpid(). Kui vanemprotsess lõpetab enne, kui ta on lugenud oma zombie-laste staatust, muutuvad need lapsed init protsessi (ID 1) lastele, kes kutsub automaatselt wait() oma laste jaoks, eemaldades seega zombid.

Seega on peamine olek, mida protsess vanemprotsessilt saab, et saada zombie, lõpetamise olek, mida vanem veel ei ole töötlenud wait*-kutsumiste kaudu.