Cos'è un processo di zombi?
Un processo di zombi è un'istanza di un programma per computer che conserva un record della tabella di processo nonostante abbia terminato l'esecuzione. 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. I 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 svolga più le funzioni previste. Quando un processo è finito ESi dice che a volte si dice 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, è responsabile, potrebbe essere possibile forzare il problema. Questo viene in genere fatto tramite il comando kill e inviando il sigchldsegnale al processo genitore. Se tutto funziona correttamente, un processo genitore che riceve questo segnale dovrebbe raccogliere i suoi figli di zombi in modo che le loro posizioni ID e la tabella di processo possano essere riutilizzate.
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, tutti gli zombi di cui è responsabile verrà infine rimosso dalla tabella di processo.