I "processi zombie" nascono per consentire al processo padre di poter leggere il valore di uscita di un processo figlio. Quando un processo termina, tutta la memoria e le risorse ad esso associate vengono liberate così da poter essere utilizzate da altri processi; tuttavia ll process control block del processo resta nella tabella dei processi (process table) affinché il processo padre possa leggerne il valore di uscita eseguendo una chiamata di sistema (wait()), dopo tale operazione il processo viene rimosso in modo definitivo.

Un "processo zombie" può dunque nascere da un errore del processo padre ma può anche essere generato di proposito, ad esempio quando il processo padre vuole assicurarsi che un nuovo processo figlio abbia un PID diverso da un figlio creato in precedenza e appena terminato.

Tali processi non utilizzano risorse della CPU, ma finché rimangono "attivi" vengono immagazzinati all'interno della RAM e nei sistemi con poche risorse questo può rappresentare un problema. Nei sistemi operativi Unix-like è dunque stato implementato un sistema per individuare rapidamente i processi zombie tramite il comando ps:

ps aux | grep Z

Di solito i processi vengono terminati tramite SIGKILL, ma i "processi zombie" sono per definizione già "morti", dunque è necessario usare SIGCHLD:

kill -s SIGCHLD pid

Al posto di "pid" si dovrà inserire l'id del "processo zombie" che desideriamo terminare. Trovare e terminare in modo definitivo un processo zombie è dunque abbastanza semplice e, se un programma è stato scritto bene, probabilmente integra anche una funzione automatica con cui eliminare tale tipologia di processi senza dover interpellare l'utente.

Via LaU

CommentaDi' la tua

Il tuo indirizzo email non sarà mostrato pubblicamente. I campi obbligatori sono contrassegnati da *