NOTIZIE

Processi Zombie in Linux: Come Identificarli e Eliminarli dal Sistema

Giovanni1993
| 2/5/2026

Cosa sono i processi zombie

Nei sistemi operativi Linux e Unix-like, un processo zombie (o defunto) è un processo che ha completato la sua esecuzione ma rimane ancora presente nella tabella dei processi del sistema. Nonostante sia tecnicamente “morto”, mantiene il suo identificativo di processo (PID) e il relativo blocco di controllo, permettendo al processo padre di leggerne il valore di uscita.

Perché nascono gli zombie

I processi zombie nascono quando un processo figlio termina la sua esecuzione, ma il processo padre non esegue la chiamata di sistema wait() o waitpid() per raccogliere le informazioni sulla terminazione. In questo caso, il kernel mantiene le informazioni del processo (PID, stato di terminazione e dati contabili) nella memoria fino a quando il padre non le richiede.

Un’eccezione importante riguarda i figli del processo init: questi non possono diventare zombie perché init esegue automaticamente una chiamata wait ogni volta che un figlio termina, eliminando così gli zombie dal sistema.

L’impatto sul sistema

Sebbene i processi zombie non consumino risorse di CPU, occupano spazio nella RAM e nella tabella dei processi. Su sistemi con risorse limitate, l’accumulo di zombie può rappresentare un problema significativo e aumentare il carico operativo del server.

Come identificarli

Per individuare i processi zombie su un sistema Linux, è possibile utilizzare il comando:

ps aux | grep Z

Questo comando mostra tutti i processi con stato “Z” (zombie). Un’alternativa è:

ps -ef | grep defunct

Come eliminarli

A differenza dei processi normali, gli zombie non possono essere terminati con il segnale SIGKILL perché sono già morti. L’approccio corretto è agire sul processo padre:

Metodo 1: Inviare il segnale SIGCHLD al processo padre per avviare la pulizia:

kill -s SIGCHLD <PPID>

Metodo 2: Terminare il processo padre stesso:

kill -9 <PPID>

Se il processo padre è init (PID 1), non è possibile killarlo senza conseguenze critiche: in questo caso è necessario riavviare la macchina.

Automazione della pulizia

Per sistemi che accumulano frequentemente processi zombie, è possibile creare uno script bash che identifica e elimina automaticamente gli zombie. Lo script può essere inserito nel crontab per essere eseguito a intervalli regolari (ad esempio ogni 10 minuti), mantenendo il sistema pulito senza intervento manuale.

Prevenzione

La soluzione migliore è prevenire la creazione di zombie implementando correttamente la gestione dei processi figli nel codice dell’applicazione, assicurandosi che il processo padre esegua sempre le chiamate wait() appropriate quando i figli terminano.