Kaj je zombi proces?

Proces zombija je primerek računalniškega programa, ki kljub temu, da je dokončal izvajanje, ohrani zapis v tabeli procesov. Nedelujoči procesi, kot so ti, so običajno povezani z Unixom® in drugimi podobnimi operacijskimi sistemi zaradi načina, kako obravnavajo podrejene procese. Ko se podrejeni proces konča z izvajanjem, je nadrejeni običajno odgovoren za njegovo odstranitev iz tabele procesov. Običajno ni mogoče neposredno odstraniti procesa zombija z ukazom kill, čeprav je starša pogosto mogoče prisiliti, da ga odstrani, če operater uporabi obvestilo signalnega otroka (SIGCHLD). Če to ne uspe, se lahko postopek zombija odstrani posredno z ubijanjem starša.

Proces zombija je metaforični opisni izraz, ki se nanaša na žive mrtve. Propadle procese v Unixu® in podobnih operacijskih sistemih je mogoče obravnavati kot analogne zombijem, saj ohranjajo prisotnost v tabeli procesov, čeprav ne opravljajo več svojih predvidenih funkcij. Ko se proces konča z izvajanjem, se včasih reče, da je umrl, medtem ko je način, s katerim operacijski sistem obnovi dodeljeno procesno tabelo, lahko znan kot žetev. Starševski proces zombija naj bi tehnično požel svoje otroke, čeprav se to ne zgodi vedno.

Obstajajo določeni primeri, ko je obstoj procesa zombija lahko nameren ali celo zaželen. Ko se podrejeni proces preneha izvajati, bo morda moral nadrejeni pozneje zagnati še en primerek istega programa. Če zombi ni bil odstranjen iz procesne tabele, novemu otroku ne bo dodeljena enaka identifikacija (ID) kot staremu otroku. Določeni programi lahko koristijo ali celo zahtevajo tovrstno razlikovanje.

Če nadrejeni proces ni izvedel ukaza čakanja, da bi požel zombije, za katere je odgovoren, je težavo morda mogoče izsiliti. To se običajno izvede z ukazom kill in pošiljanjem signala SIGCHLD nadrejenemu procesu. Če vse deluje pravilno, bi moral nadrejeni proces, ki prejme ta signal, izkoristiti svoje podrejene zombi, tako da je mogoče njihove ID-je in položaje v tabeli procesov ponovno uporabiti.

V določenih okoliščinah lahko nadrejeni proces prezre signal SIGCHLD. Če se to zgodi in operater še vedno želi, da se tabela procesov počisti, se lahko nadrejeni proces ubije. Vsi zombiji, ki jih je ustvaril nadrejeni proces, bodo nato dodeljeni kot podrejeni procesu init. Ker init občasno sproži ukaz čakanja na svojih podrejenih, bodo vsi zombiji, za katere je odgovoren, sčasoma odstranjeni iz tabele procesov.