Hva er en zombieprosess?
En zombie-prosess er et eksempel på et dataprogram som beholder en prosesstabelloppføring til tross for at den er ferdig utført. Avaktiverte prosesser som disse er vanligvis tilknyttet Unix® og andre lignende operativsystemer på grunn av måten de håndterer barneprosesser på. Når en barneprosess er ferdig utført, er forelderen vanligvis ansvarlig for å fjerne den fra prosessbordet. Det er vanligvis ikke mulig å fjerne en zombie-prosess direkte med drapskommandoen, selv om foreldrene ofte kan få den til å fjerne den hvis operatøren bruker signalbarnsvarslingen (SIGCHLD). Hvis dette ikke lykkes, kan en zombie-prosess fjernes indirekte ved å drepe forelderen.
Zombie-prosess er et metaforisk beskrivende begrep som viser til de levende døde. Avviklede prosesser i Unix® og lignende operativsystemer kan sees som analoge med zombier ved at de opprettholder en prosessbordtilstedeværelse til tross for at de ikke lenger utfører sine tiltenkte funksjoner. Når en prosess er ferdig utført, sies det noen ganger at den har dødd, mens virkemidlene som operativsystemet gjenoppretter sin prosesstabellallokering kan kalles høsting. Foreldreprosessen til en zombie er teknisk ment å høste sine barn, selv om dette ikke alltid skjer.
Det er visse tilfeller der eksistensen av en zombieprosess kan være forsettlig eller til og med ønsket. Etter at en barneprosess har sluttet henrettelse, kan det hende at forelderen må kjøre en annen forekomst av det samme programmet senere. Hvis en zombie ikke er fjernet fra prosessbordet, vil ikke et nytt barn tildeles samme identifikasjon (ID) som det gamle barnet. Enkelte programmer kan ha fordel av eller til og med kreve denne typen differensiering.
Hvis en overordnet prosess ikke har utført ventekommandoen for å høste zombier den er ansvarlig for, kan det være mulig å tvinge problemet. Dette gjøres vanligvis via kill-kommandoen og sender SIGCHLD-signalet til overordnet prosess. Hvis alt fungerer som det skal, skal en foreldreprosess som mottar dette signalet høste sine zombiebarn, slik at ID-ene og prosessbordsposisjonene kan brukes på nytt.
Under visse omstendigheter kan en foreldreprosess ignorere SIGCHLD-signalet. Hvis dette skjer og operatøren fremdeles ønsker at prosesstabellen skal tømmes, kan overordnede prosesser drepes. Eventuelle zombier som foreldreprosessen opprettet blir deretter tildelt som barn til init-prosessen. Siden init med jevne mellomrom initierer ventekommandoen på barna sine, vil eventuelle zombier den er ansvarlig for etter hvert bli fjernet fra prosessbordet.