Se sei un utente Linux, potresti aver visto i processi di zombi che si agitavano nel tuo elenco di processi. Non puoi uccidere un processo di zombi perché è già morto, come un vero zombi.
Gli zombi sono sostanzialmente gli avanzi di processi morti che non sono stati ripuliti correttamente. Un programma che crea processi di zombi non è programmato correttamente – i programmi non dovrebbero lasciare che i processi di zombi si attacchino.
Che cos'è un processo di zombi?
Per capire cos'è un processo di zombi e cosa fa apparire i processi di zombi, dovrai capire un po 'come funzionano i processi su Linux.
Quando un processo muore su Linux, non viene rimosso immediatamente dalla memoria: il descrittore di processo rimane in memoria (il descrittore di processo richiede solo una piccola quantità di memoria). Lo stato del processo diventa EXIT_ZOMBIE e il genitore del processo viene avvisato che il suo processo figlio è morto con il segnale SIGCHLD. Il processo padre dovrebbe quindi eseguire la chiamata di sistema wait () per leggere lo stato di uscita del processo morto e altre informazioni. Ciò consente al processo parent di ottenere informazioni dal processo dead. Dopo aver chiamato wait (), il processo zombie viene completamente rimosso dalla memoria.
Questo di solito accade molto rapidamente, quindi non vedrai accumularsi processi di zombi sul tuo sistema. Tuttavia, se un processo genitore non è programmato correttamente e non chiama mai wait (), i suoi figli di zombi rimarranno nella memoria fino a quando non saranno ripuliti.
Utilità come GNOME System Monitor, il superiore comando e il ps comando visualizza processi zombi.

Pericoli dei processi di zombi
I processi di zombi non consumano risorse di sistema. (In realtà, ognuno usa una piccolissima quantità di memoria di sistema per memorizzare il suo descrittore di processo.) Tuttavia, ogni processo di zombi conserva il suo ID di processo (PID). I sistemi Linux hanno un numero finito di ID processo – 32767 per impostazione predefinita sui sistemi a 32 bit. Se gli zombi si stanno accumulando a una velocità molto rapida, ad esempio se un software server programmato in modo errato sta creando processi di zombi sotto carico, l'intero pool di PID disponibili verrà assegnato ai processi di zombi, impedendo l'avvio di altri processi.
Tuttavia, alcuni processi di zombi in giro non sono un problema, anche se indicano un bug con il loro processo genitore sul tuo sistema.

Sbarazzarsi dei processi di zombi
Non puoi uccidere i processi di zombi poiché puoi uccidere i normali processi con il segnale SIGKILL: i processi di zombi sono già morti. Ricorda che non devi sbarazzarti dei processi di zombi a meno che tu non abbia una grande quantità nel tuo sistema – alcuni zombi sono innocui. Tuttavia, ci sono alcuni modi in cui puoi sbarazzarti dei processi di zombi.
Un modo è l'invio del segnale SIGCHLD al processo genitore. Questo segnale dice al processo genitore di eseguire la chiamata di sistema wait () e ripulire i suoi figli zombi. Invia il segnale con il uccidere comando, in sostituzione pid nel comando seguente con il PID del processo parent:
kill -s SIGCHLD pid
Tuttavia, se il processo genitore non è programmato correttamente e ignora i segnali SIGCHLD, questo non sarà di aiuto. Dovrai uccidere o chiudere il processo genitore degli zombi. Quando termina il processo che ha creato gli zombi, init eredita i processi di zombi e diventa il loro nuovo genitore. (init è il primo processo avviato su Linux all'avvio e viene assegnato PID 1.) init esegue periodicamente la chiamata di sistema wait () per ripulire i suoi figli zombi, quindi init farà un breve lavoro degli zombi. È possibile riavviare il processo padre dopo averlo chiuso.
Se un processo genitore continua a creare zombi, dovrebbe essere corretto in modo che chiami correttamente wait () per raccogliere i suoi figli zombi. Invia una segnalazione di bug se un programma sul tuo sistema continua a creare zombi.
