Mikä on zombiprosessi?

Zombiprosessi on esimerkki tietokoneohjelmasta, joka säilyttää prosessitaulukkotietueen suorittamisesta huolimatta. Tällaiset käytöstä poistetut prosessit liittyvät tyypillisesti Unixiin® ja muihin vastaaviin käyttöjärjestelmiin, koska ne käsittelevät aliprosesseja. Kun aliprosessi on suoritettu, vanhempi on tyypillisesti vastuussa sen poistamisesta prosessitaulukosta. Zombiprosessia ei yleensä voida poistaa suoraan kill -komennolla, vaikka vanhempi voidaan usein saada poistamaan, jos operaattori käyttää SIGCHLD -signaali -ilmoitusta. Jos tämä ei onnistu, zombiprosessi voidaan poistaa epäsuorasti tappamalla vanhempi.

Zombiprosessi on vertauskuvallinen kuvaava termi, joka viittaa eläviin kuolleisiin. Unix®: n ja vastaavien käyttöjärjestelmien toimintakyvyttömiä prosesseja voidaan pitää zombien kaltaisina, koska ne ylläpitävät prosessitaulukon läsnäoloa, vaikka ne eivät enää suorita aiottuja toimintoja. Kun prosessi on päättynyt, sen sanotaan joskus kuolleen, kun taas käyttöjärjestelmän palautusprosessitaulukon varausta voidaan kutsua leikkaukseksi. Zombin vanhemman prosessin on teknisesti tarkoitus saada lapsiaan, vaikka näin ei aina tapahdu.

On tiettyjä tapauksia, joissa zombiprosessin olemassaolo voi olla tahallista tai jopa toivottua. Kun aliprosessi on lakannut suorittamasta, vanhemman on ehkä suoritettava toinen saman ohjelman esiintymä myöhemmin. Jos zombia ei ole poistettu prosessitaulukosta, uudelle lapselle ei anneta samaa tunnistetta (ID) kuin vanhalle lapselle. Tietyt ohjelmat voivat hyötyä tällaisesta erilaistumisesta tai jopa vaatia sitä.

Jos vanhempiprosessi ei ole suorittanut odotuskäskyä saadakseen vastuulleen zombeja, ongelma voi olla pakotettu. Tämä tehdään tyypillisesti kill -komennolla ja lähettämällä SIGCHLD -signaali pääprosessille. Jos kaikki toimii oikein, tämän signaalin vastaanottavan vanhemman prosessin pitäisi saada zombielapsiaan, jotta heidän tunnuksensa ja prosessitaulukon sijainnit voidaan käyttää uudelleen.

Tietyissä olosuhteissa pääprosessi voi jättää huomiotta SIGCHLD -signaalin. Jos näin tapahtuu ja operaattori haluaa edelleen, että prosessitaulukko tyhjennetään, pääprosessi voidaan tappaa. Kaikki pääprosessin luomat zombit osoitetaan sitten lapsiksi init -prosessiin. Koska init käynnistää säännöllisesti odotuskäskyn lapsilleen, kaikki sen vastuulla olevat zombit poistetaan lopulta prosessitaulukosta.