Processo zombieUn processo zombie (processo defunto) nei sistemi operativi Unix e Unix-like è un processo informatico che, nonostante abbia terminato la propria esecuzione, possiede ancora un PID ed un Process control block, necessario per permettere al proprio processo padre di leggerne il valore di uscita. Origine del termineIl termine processo zombie deriva dalla definizione comune di zombie: una persona non completamente morta. Seguendo questa metafora, il processo figlio è morto ma non è stato ancora mietuto dalla grande falciatrice (la morte personificata ha con sé una falce fienaia). Origine dei processi zombieQuando un processo termina, tutta la memoria e le risorse ad esso associate vengono liberate così da poter essere utilizzate da altri processi. Ciò nonostante, il process control block del processo resta nella tabella dei processi (process table) affinché il processo padre possa leggerne il valore di uscita eseguendo la chiamata di sistema Quando il processo padre non invoca la chiamata di sistema wait, il processo zombie continua a rimanere nella tabella dei processi: in alcuni casi ciò viene fatto di proposito, ad esempio quando il processo padre, creando un nuovo processo figlio, vuole assicurarsi che questo abbia un PID diverso da un figlio creato in precedenza appena terminato. Lo standard POSIX.1-2001, a differenza del precedente POSIX.1-1990, permette di ignorare esplicitamente il segnale SIGCHLD, impostandone SIGN IGN come gestore, così da poter scartare il valore di uscita di un processo ed evitare che questo diventi zombie. Questo comportamento è seguito ad esempio dai sistemi operativi basati su Linux (a partire dalla versione 2.6 del kernel) e da HP-UX, mentre altri sistemi, come gli storici sistemi BSD e UNIX System V, seguono comportamenti differenti che rendono l'uso di wait l'unico modo certo per evitare la creazione di processi zombie.[1] Identificazione di processi zombieI processi zombie possono essere identificati dall'output del comando Unix ps tramite la presenza di una "Z" nella colonna STAT. Processi zombie che persistono più a lungo di un breve periodo di tempo tipicamente indicano un bug del programma padre. Come capita per altri tipi di memory leak, la presenza di pochi processi zombie non preoccupa di per sé, ma può prospettare un problema che sotto maggiori carichi di sistema diverrebbe serio. Dato che non vi è memoria allocata per i processi zombie a parte il process control block stesso, il problema principale non è il consumo di memoria quanto l'esaurimento dei PID disponibili e il riempimento della tabella dei processi, cose che porterebbero all'impossibilità di creare nuovi processi.[2] Eliminazione di processi zombiePer eliminare un processo zombie nel caso tipico in cui il suo processo padre non recupera il suo valore di uscita occorre eliminare il suo processo padre, ad esempio inviando a quest'ultimo un segnale Così facendo, il processo zombie diviene un processo orfano, che viene immediatamente adottato da init il quale esegue periodicamente la chiamata di sistema Note
Voci correlateCollegamenti esterni
|