Il processo Zombie non avrà alcun effetto sulle prestazioni o sulla lentezza poiché i processi Zombie non consumano risorse di sistema.
Nota: - Praticamente, sta ancora usando il PID (che è una risorsa limitata) e le strutture di dati del kernel per il processo sono ancora allocate. Di solito, questo non ha molta importanza, ma l'utilizzo della memoria del kernel può essere significativo su sistemi con memoria molto limitata.
Problema causato dal processo di zombi
Ogni processo di zombi conserva il suo ID processo. I sistemi Linux hanno un numero finito di ID processo - 32767 per impostazione predefinita su sistemi a 32 bit. Se gli zombi si accumulano a una velocità molto elevata, l'intero pool di PID disponibili verrà assegnato ai processi zombi, impedendo l'avvio di altri processi.
Nota : sui sistemi a 64 bit, è possibile aumentare il PID massimo, consultare /unix//a/16884/170373
Tuttavia, alcuni processi di zombi in giro non sono un problema, anche se indicano un bug con il loro processo genitore sul tuo sistema.
Spiegazione:
Quando un processo muore su Linux, non tutto viene rimosso immediatamente dalla memoria, il suo descrittore di processo rimane in memoria.
Lo stato del processo diventa EXIT_ZOMBIE
e il genitore del processo viene informato che il suo processo figlio è morto con il SIGCHLD
segnale.
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 zombi rimarranno nella memoria finché non vengono ripuliti.
Risoluzione:
Non puoi uccidere i processi di zombi poiché puoi uccidere i normali processi con il segnale SIGKILL: i processi di zombi sono già morti.
Un modo per uccidere gli zombi è inviare il 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 comando kill, sostituendo pid nel comando seguente con il PID del processo parent:
kill -s SIGCHLD pid
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.)
Nota: - Da Linux 3.4 in poi i processi possono emettere la chiamata di sistema prctl () con l'opzione PR_SET_CHILD_SUBREAPER e di conseguenza, non il processo n. 1, diventeranno i genitori dei loro processi discendenti orfani. Consultare: /unix//a/177361/5132
INIT quindi esegue la chiamata di sistema wait () per ripulire i suoi figli di zombi, quindi init farà un breve lavoro degli zombi. È possibile riavviare il processo padre dopo averlo chiuso.