Che cosa è un processo zombie?

September 9

Un processo zombie è un processo di computer in un sistema operativo basato su Unix che ha terminato l'esecuzione, ma ha ancora un numero ID di processo a sinistra nella tabella dei processi del sistema operativo. Sono i resti di un processo più ampio o un programma che non è riuscito a raccogliere ed eseguire tutti i comandi di uscita per quando il processo termina. Questi processi non occupano alcun cicli di CPU o memoria però.

Causa

codice di programma difettoso porta spesso a processi non terminare correttamente, con conseguente processi zombie derivanti programmi in esecuzione. Il programmatore non ha programmato un processo padre per usare la chiamata di sistema "aspettare" per consentire un processo figlio per eseguire in modo indipendente, mentre il padre viene sospeso. Ciò significa che il processo figlio non restituisce un messaggio di stato di uscita al genitore quando termina, in modo che il genitore non riceve mai avviso circa la cessazione, e il processo figlio diventa un processo zombie.

considerazioni

Non abbiate fretta di terminare i processi zombie, non appena li trovate. A volte processi genitori lasciano i processi zombie di proposito in modo che lo stesso numero ID del processo non è dato a due processi distinti durante la durata della vita del programma. Se si vede solo pochi processi zombie in un momento che non sono persistenti, i processi genitori possono eventualmente di porvi fine. Tuttavia, se il sistema comincia a rallentare con una grande quantità di processi in esecuzione, che chiude un processo zombie può migliorare le prestazioni.

Individuazione Zombies

Utilizzando uno strumento di comando Unix per eseguire il comando "ps" - abbreviazione di stato del processo - elenca tutti i processi attualmente in esecuzione su un sistema. Qualsiasi processo indicato come "z" nella colonna Stat è un processo zombie. Ognuno di questi processi che esistono, mentre il processo padre o il programma è ancora in esecuzione è indicativo di codice difettoso, mentre i processi zombie esecuzione senza un programma genitore di solito rappresentano un bug nel sistema operativo stesso.

uccidendo gli zombie

processi Zombie mantengono numeri ID di processo nella tabella voce di processo, in modo da avere troppi di loro fare causa il sistema per l'esecuzione di questi numeri. Tuttavia, è possibile forzatamente terminare i processi zombie per liberare i loro valori ID di processo nella tabella. Terminare loro utilizzando il "kill -s SIGCHLD <ppid>" di comando, dove "PPID" rappresenta l'ID di processo del genitore zombie. In alternativa, è possibile forzatamente uccidere i processi associati di terminare tutti i bambini ed i processi zombie che hanno creato pure.