Mis on zombiprotsess?

Zombiprotsess on arvutiprogrammi eksemplar, mis säilitab protsessitabeli kirje, hoolimata käivitamise lõpetamisest. Sellised mittetoimivad protsessid on tavaliselt seotud Unix®-i ja muude sarnaste operatsioonisüsteemidega, kuna need käitavad alamprotsesse. Kui alamprotsess on täitmise lõpetanud, vastutab selle protsessitabelist eemaldamise eest tavaliselt vanem. Tavaliselt ei ole zombiprotsessi otsene eemaldamine käsuga kill võimalik, kuigi sageli saab vanema panna selle eemaldama, kui operaator kasutab signaali lapse (SIGCHLD) teatist. Kui see ei õnnestu, võidakse zombiprotsess kaudselt eemaldada vanema tapmisega.

Zombie protsess on metafooriline kirjeldav termin, mis viitab elavatele surnutele. Unix®-i ja sarnaste operatsioonisüsteemide mittetoimivaid protsesse võib vaadelda zombide analoogidena, kuna need säilitavad protsessitabeli, hoolimata sellest, et nad enam ei täida oma ettenähtud funktsioone. Kui protsess on täitmise lõpetanud, öeldakse mõnikord, et see on surnud, samas kui vahendeid, mille abil operatsioonisüsteem oma protsessitabeli jaotuse taastab, võib nimetada lõikamiseks. Tehniliselt peaks zombi vanemprotsess oma lapsi lõikama, kuigi see ei juhtu alati.

Teatud juhtudel võib zombiprotsessi olemasolu olla tahtlik või isegi soovitav. Kui alamprotsess on täitmise lõpetanud, võib vanem vajada hiljem sama programmi teist eksemplari käivitada. Kui zombi pole protsessitabelist eemaldatud, ei omistata uuele lapsele sama identifikaatorit (ID), mis vanale lapsele. Teatud programmid võivad sellisest eristamisest kasu saada või isegi nõuda seda.

Kui vanemprotsess ei ole täitnud ootamiskäsku, et saada zombisid, mille eest ta vastutab, võib probleemi olla võimalik sundida. Tavaliselt tehakse seda käsuga kill ja SIGCHLD signaali saatmine vanemprotsessile. Kui kõik töötab korralikult, peaks selle signaali vastuvõttev vanemprotsess saama oma zombidest lapsi, et nende ID-sid ja protsessitabeli positsioone saaks uuesti kasutada.

Teatud asjaoludel võib vanemprotsess SIGCHLD signaali ignoreerida. Kui see juhtub ja operaator soovib endiselt protsessitabelit tühjendada, võidakse vanemprotsess surra. Kõik zombid, mille vanemprotsess on loonud, määratakse seejärel init-protsessi lasteks. Kuna init käivitab oma lastele perioodiliselt ootamiskäskluse, eemaldatakse protsessitabelist lõpuks kõik zombid, mille eest see vastutab.