Vad är en Zombie-process?
En zombieprocess är ett exempel på ett datorprogram som behåller en processtabellpost trots att du har slutfört exekveringen. Avaktiverade processer som dessa är vanligtvis associerade med Unix® och andra liknande operativsystem på grund av hur de hanterar barnprocesser. När en barnprocess har slutfört ä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, men föräldern kan ofta göras för att ta bort den om operatören använder signalbarn (SIGCHLD) -meddelandet. Om detta inte lyckas kan en zombieprocess tas bort indirekt genom att döda föräldern.
Zombie-processen är en metaforisk beskrivande term som hänvisar till de levande döda. Avaktiverade processer i Unix® och liknande operativsystem kan ses som analoga med zombies genom att de upprätthåller en processtabell närvaro trots att de inte längre utför sina avsedda funktioner. När en process har slutförts sägs den ibland ha dött, medan de medel med vilka operativsystemet återvinner sin processtabellokering kan kallas skörda. Föräldraprocessen för en zombie är tekniskt tänkt att skörda sina barn, men detta händer inte alltid.
Det finns vissa fall där förekomsten av en zombieprocess kan vara avsiktlig eller till och med önskad. Efter att en barnprocess har upphört med körningen, 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 tilldelas inte ett nytt barn samma identifikation (ID) som det gamla barnet. Vissa program kan dra nytta av eller till och med kräva denna typ av differentiering.
Om en överordnad process inte har kört vänta-kommandot för att skörda zombier den är ansvarig för, kan det vara möjligt att tvinga problemet. Detta görs vanligtvis via kill-kommandot och skickar SIGCHLD-signalen till överordnadsprocessen. Om allt fungerar korrekt, bör en överordnad process som får 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 ska rensas kan överordnadsprocessen dödas. Alla zombies som den överordnade processen skapat tilldelas sedan som barn till initprocessen. Eftersom den regelbundet initierar väntekommandot på sina barn, kommer alla zombies som den ansvarar för så småningom att tas bort från processtabellen.