Vad är en zombieprocess?

En zombieprocess är en instans av ett datorprogram som behåller en processtabellpost trots att den har avslutats. Nedlagda processer som dessa är vanligtvis associerade med Unix® och andra liknande operativsystem på grund av hur de hanterar underordnade processer. När en underordnad process har körts färdigt är föräldern vanligtvis ansvarig för att ta bort den från processtabellen. Det är vanligtvis inte möjligt att direkt ta bort en zombieprocess med kill-kommandot, även om föräldern ofta kan tvingas ta bort den om operatören använder meddelandet om signalbarn (SIGCHLD). Om detta misslyckas, kan en zombieprocess tas bort indirekt genom att döda föräldern.

Zombieprocessen är en metaforisk beskrivande term som refererar till de levande döda. Nedlagda processer i Unix® och liknande operativsystem kan ses som analoga med zombies genom att de upprätthåller en processtabellnärvaro trots att de inte längre utför sina avsedda funktioner. När en process har slutförts exekvering sägs den ibland ha dött, medan det sätt på vilket operativsystemet återställer sin processtabellallokering kan kallas skörd. Föräldraprocessen för en zombie är tekniskt sett tänkt att skörda sina barn, även om detta inte alltid händer.

Det finns vissa fall där förekomsten av en zombieprocess kan vara avsiktlig eller till och med önskad. Efter att en underordnad process har upphört att köras kan föräldern behöva köra en annan instans av samma program senare. Om en zombie inte har tagits bort från processtabellen kommer ett nytt barn inte att tilldelas samma identifiering (ID) som det gamla barnet. Vissa program kan dra nytta av eller till och med kräva denna typ av differentiering.

Om en förälderprocess inte har utfört väntekommandot för att skörda zombies som den är ansvarig för, kan det vara möjligt att tvinga fram problemet. Detta görs vanligtvis via kill-kommandot och skickar SIGCHLD-signalen till föräldraprocessen. Om allt fungerar som det ska bör en förälderprocess som tar emot denna signal skörda sina zombiebarn så att deras ID och processtabellpositioner kan återanvändas.

Under vissa omständigheter kan en överordnad process ignorera SIGCHLD-signalen. Om detta inträffar och operatören fortfarande önskar att processtabellen rensas, kan den överordnade processen dödas. Eventuella zombies som föräldraprocessen skapade kommer sedan att tilldelas som barn till initprocessen. Eftersom init med jämna mellanrum initierar väntekommandot på sina barn, kommer alla zombier som den är ansvarig för så småningom att tas bort från processtabellen.