Wat is een zombieproces?
Een zombie-proces is een exemplaar van een computerprogramma dat een proces-tabelrecord bijhoudt ondanks het feit dat het is uitgevoerd. Defecte processen zoals deze worden meestal geassocieerd met Unix® en andere vergelijkbare besturingssystemen vanwege de manier waarop ze onderliggende processen verwerken. Wanneer een onderliggend proces is uitgevoerd, is de ouder meestal verantwoordelijk voor het verwijderen van de procestabel. Het is meestal niet mogelijk om een zombie-proces direct te verwijderen met de opdracht kill, hoewel de ouder er vaak voor kan zorgen dat het wordt verwijderd als de operator de melding signal child (SIGCHLD) gebruikt. Als dit niet lukt, kan een zombie-proces indirect worden verwijderd door de ouder te doden.
Zombie-proces is een metaforische beschrijvende term die verwijst naar de levende doden. Defecte processen in Unix® en vergelijkbare besturingssystemen kunnen worden gezien als analoog aan zombies in die zin dat ze de aanwezigheid van een procestabel behouden ondanks het niet langer uitvoeren van hun beoogde functies. Wanneer een proces is voltooid, wordt soms gezegd dat het is overleden, terwijl de manier waarop het besturingssysteem de toewijzing van de procestabellen herstelt, bekend staat als het oogsten. Het ouderproces van een zombie wordt technisch verondersteld om zijn kinderen te plukken, hoewel dit niet altijd gebeurt.
Er zijn bepaalde gevallen waarin het bestaan van een zombieproces opzettelijk of zelfs gewenst kan zijn. Nadat de uitvoering van een kindproces is gestopt, moet de ouder mogelijk later een ander exemplaar van hetzelfde programma uitvoeren. Als een zombie niet uit de procestabel is verwijderd, krijgt een nieuw kind niet dezelfde identificatie (ID) toegewezen als het oude kind. Bepaalde programma's kunnen baat hebben bij of vereisen zelfs dit soort differentiatie.
Als een ouderproces het wachtcommando niet heeft uitgevoerd om zombies te plukken waarvoor het verantwoordelijk is, kan het probleem mogelijk worden afgedwongen. Dit gebeurt meestal via het kill-commando en het verzenden van het SIGCHLD-signaal naar het bovenliggende proces. Als alles goed werkt, moet een ouderproces dat dit signaal ontvangt zijn zombiekinderen plukken, zodat hun ID's en procestafelposities kunnen worden hergebruikt.
Onder bepaalde omstandigheden kan een ouderproces het SIGCHLD-signaal negeren. Als dit gebeurt en de operator nog steeds wenst dat de procestabel wordt gewist, kan het bovenliggende proces worden gedood. Alle zombies die het ouderproces heeft gemaakt, worden vervolgens als kinderen aan het init-proces toegewezen. Omdat init periodiek het wachtcommando op zijn kinderen initieert, zullen eventuele zombies waarvoor het verantwoordelijk is uiteindelijk uit de procestabel worden verwijderd.