Skip to main content

Cos'è un processo di zombi?

Un processo di zombi è un'istanza di un programma per computer che mantiene un record della tabella di processo nonostante abbia terminato l'esecuzione.I processi defunti come questi sono in genere associati a Unix e altri sistemi operativi simili a causa del modo in cui gestiscono i processi dei bambini.Quando un processo figlio ha terminato l'esecuzione, il genitore è in genere responsabile della rimozione dalla tabella dei processi.Di solito non è possibile rimuovere direttamente un processo di zombi con il comando Kill, sebbene il genitore possa spesso essere fatto per rimuoverlo se l'operatore utilizza la notifica Signal Child (SIGCHLD).In caso contrario, un processo di zombi può essere rimosso indirettamente uccidendo il genitore.

Il processo di zombi è un termine descrittivo metaforico che fa riferimento ai morti viventi.Processi defunti in Unix e sistemi operativi simili possono essere visti come analoghi agli zombi in quanto mantengono una presenza della tabella di processo nonostante non abbia più svolto le funzioni previste.Quando un processo ha terminato l'esecuzione, a volte si dice che sia morto, mentre i mezzi con cui il sistema operativo recupera la sua allocazione della tabella di processo possono essere noti come raccogliere.Il processo genitore di uno zombi dovrebbe tecnicamente raccogliere i propri figli, sebbene ciò non accada sempre.

Ci sono alcuni casi in cui l'esistenza di un processo di zombi può essere intenzionale o addirittura desiderata.Dopo che un processo figlio ha cessato l'esecuzione, il genitore potrebbe aver bisogno di eseguire un'altra istanza dello stesso programma in seguito.Se uno zombi non è stato rimosso dalla tabella di processo, a un nuovo bambino non verrà assegnato la stessa identificazione (ID) del vecchio bambino.Alcuni programmi possono beneficiare o addirittura richiedere questo tipo di differenziazione.

Se un processo genitore non ha eseguito il comando di attesa per raccogliere zombi di cui è responsabile, potrebbe essere possibile forzare il problema.Questo viene in genere eseguito tramite il comando Kill e l'invio del segnale Sigchld al processo genitore.Se tutto funziona correttamente, un processo genitore che riceve questo segnale dovrebbe raccogliere i suoi figli di zombi in modo che i loro ID e le posizioni della tabella di processo possano essere riutilizzati.

In determinate circostanze, un processo genitore può ignorare il segnale Sigchld.Se ciò si verifica e l'operatore desidera ancora che la tabella di processo venga cancellata, il processo genitore possa essere ucciso.Tutti gli zombi creati dal processo genitore verranno quindi assegnati come bambini al processo INIT.Poiché INIT avvia periodicamente il comando di attesa sui suoi figli, qualsiasi zombi di cui è responsabile verrà infine rimosso dalla tabella di processo.