Glossario/Quando qualcosa va storto

Processo zombie

Anche: processo defunto, defunct

In breve

Un processo zombie è un processo che ha finito di funzionare ma ha ancora una voce nella tabella dei processi, perché il processo padre non ha ancora raccolto il suo stato di uscita. Non usa CPU e occupa pochissima memoria.

Quando un processo termina, il sistema conserva un piccolo record perché il padre possa sapere come è uscito. Di solito il padre legge subito quel record e la voce sparisce. Se il padre non lo fa mai, il processo finito resta nell’elenco come zombie.

Qualche zombie è innocuo. Un numero che cresce di continuo indica un bug nel programma padre.

Come trovare i processi zombie sul Mac

Nel Terminale, esegui ps -axo pid,ppid,stat,comm | awk '$3 ~ /^Z/'. Ogni riga è uno zombie, e la colonna PPID mostra il processo padre che ne è responsabile.

Come eliminare un processo zombie

Non puoi terminare uno zombie, perché è già uscito. La soluzione è il padre. Chiudi o riavvia l’app padre, e lo zombie passa a launchd, che lo fa sparire.

Non chiudere launchd o altri processi di sistema per eliminare gli zombie. Se il padre è un processo di sistema, basta riavviare il Mac.

Come trovare il padre di uno zombie

Nella colonna del comando completo di ps, uno zombie compare come <defunct>, perché il suo programma è già uscito. Il processo di cui occuparsi è il padre.

  1. Esegui ps -axo pid,ppid,stat,comm | awk '$3 ~ /^Z/' per elencare gli zombie. La Z nella colonna STAT indica uno zombie.
  2. Annota il numero nella colonna PPID.
  3. Esegui ps -p <PPID> -o pid,user,command per vedere quale programma è il padre.
  4. In Monitoraggio Attività, scegli Vista > Tutti i processi in gerarchia per vedere lo stesso albero di padri e figli.
  5. Occupati del padre. Se è un’app che hai aperto tu, chiudila e riaprila. Se è una shell o uno script nel Terminale, chiudi quella finestra o ferma lo script. Se è un processo di sistema, riavvia il Mac.

Normale o preoccupante

Un programma padre raccoglie lo stato di uscita di un figlio con la famiglia di chiamate di sistema wait. Un programma che avvia processi figli ma non li aspetta mai lascia dietro di sé degli zombie. È un bug nel padre, e solo il suo sviluppatore può risolverlo per davvero.

Vedere uno zombie per un attimo è normale. Esiste tra il momento in cui un processo esce e quello in cui il padre legge il suo stato di uscita, che di solito è brevissimo.

Vale la pena guardare quando lo stesso padre tiene in giro molti zombie, o quando il loro numero continua a crescere per ore. Per contarli, esegui ps -axo stat | grep -c '^Z'. Per vedere i limiti dei processi sul tuo Mac, esegui sysctl kern.maxproc kern.maxprocperuid.

Processi zombie, orfani e bloccati sono diversi

Questi tre termini si confondono spesso, e ognuno richiede una soluzione diversa.

  • Uno zombie ha finito di funzionare. Resta solo la sua voce nella tabella dei processi.
  • Un orfano è ancora in esecuzione, ma il suo padre è uscito. macOS lo affida a launchd, il PID 1, che diventa il suo nuovo padre.
  • Un processo bloccato è ancora in esecuzione ma fermo, spesso segnato con (non risponde) in Monitoraggio Attività. A differenza di uno zombie, si può chiudere o forzarne l’uscita.

Cosa non fare

In piccolo numero gli zombie sono innocui, quindi non c’è motivo di correre rischi per eliminarli.

  • Non eseguire kill -9 sul PID dello zombie. È già uscito, quindi il segnale non ha effetto.
  • Non chiudere launchd o altri processi di sistema per eliminare gli zombie. Un riavvio fa la stessa cosa in sicurezza.
  • Non chiudere il padre senza controllare cos’è. Se è un’app con documenti aperti, salva prima il tuo lavoro.

Domande frequenti

Cos’è un processo zombie sul Mac?

È un processo che ha finito ma è ancora in elenco perché il padre non ha raccolto il suo stato di uscita. Non usa CPU.

Come terminare un processo zombie?

Non puoi terminarlo direttamente. Chiudi o riavvia il suo processo padre, indicato nella colonna PPID di ps, e lo zombie sparisce.

I processi zombie sono dannosi?

Pochi no. Ognuno occupa un posto nella tabella dei processi, quindi un numero grande e in crescita alla lunga può causare problemi e indica un programma padre difettoso.

Perché kill -9 non elimina un processo zombie?

Uno zombie non è in esecuzione, quindi il segnale non ha niente da fermare. Lo elimina solo il padre, raccogliendo il suo stato di uscita o uscendo a sua volta.

Riavviare il Mac elimina i processi zombie?

Sì. Un riavvio termina tutti i processi, compresi gli zombie e i loro padri.

I processi zombie sono un segno di malware?

No. Sono una parte normale del modo in cui escono i processi Unix. Molti zombie dallo stesso padre di solito significano che quel programma ha un bug.

Correlati

Vieni da Windows? Leggi Task Manager per Mac, oppure le migliori alternative a Monitoraggio Attività. Oppure sfoglia tutti i termini del glossario.