GNU/Linux >> Linux Esercitazione >  >> Linux

Come trovare e uccidere il processo Zombie in Linux

Breve:questo è un rapido consiglio su come trovare processi zombie in Linux e poi ucciderli. Imparerai anche una o due cose sui processi e sui processi zombi.

Prima di conoscere il processo Zombie, vorrei ricordare cos'è un processo in Linux.

In poche parole, un processo è un'istanza in esecuzione di un programma in esecuzione. Può essere in primo piano (processo interattivo) o in background (processo non interattivo o automatico). Può essere un processo padre (creatore di altri processi durante l'esecuzione) o figlio (processo creato da altri).

In Linux, ad eccezione del primo processo init (o systemd) con PID 0, ogni altro processo ha un processo padre. I processi hanno anche i propri processi figlio.

Non mi credi? Usa pstree comando nel terminale per guardare l'albero dei processi per vedere l'"albero genealogico" dei processi del tuo sistema.

Cos'è un processo Zombie in Linux?

Quando un processo figlio muore, il processo padre viene informato in modo che possa eseguire alcune operazioni di pulizia come liberare memoria, ecc. Tuttavia, il processo figlio va in stato di zombi se il processo padre non è a conoscenza della sua morte. Per il genitore, il figlio esiste ancora ma il processo figlio è effettivamente morto. Questo è il modo in cui i processi zombie (noti anche come processi defunti) vengono creati e rimangono nel sistema.

Ecco un'eccellente versione divertente del processo zombi di Turnoff.us:

Hai davvero bisogno di preoccuparti dei processi Zombie?

Qui è importante dire che i processi zombi non sono così pericolosi come potrebbe sembrare il suo nome.

Il problema può sorgere se il tuo sistema ha una RAM limitata o se ci sono troppi processi zombie che consumano RAM. Inoltre, la maggior parte dei processi Linux può avere il PID massimo impostato su 32768. Se non sono disponibili ID per altre attività produttive, il sistema potrebbe bloccarsi.

Questo accade raramente, ma è una possibilità, specialmente se un programma mal codificato inizia a indurre numerosi processi zombie.

In tal caso, sarebbe una buona idea trovare e uccidere il processo di zombi.

Come trovare i processi zombie?

Un processo in Linux può avere uno dei seguenti stati:

  • D =sonno ininterrotto
  • Io =inattivo
  • R =in esecuzione
  • S =dormendo
  • T =interrotto da segnale di controllo lavoro
  • t =interrotto dal debugger durante la traccia
  • Z =zombi

Ma dove puoi vedere i processi e il loro rispettivo stato? Un modo semplice è utilizzare il terminale e il comando in alto.

Come puoi vedere nello screenshot qui sopra, ci sono 250 attività (o processi) totali, 1 è in esecuzione, 248 processi sono inattivi e 1 è in stato di zombie.

Ora sorge la domanda, come uccidere il processo zombi?

Come trovare e uccidere un processo zombi? Un processo zombi può essere ucciso?

Un processo zombi è già morto. Come si uccide un processo già morto?

Nei film di zombi, spari agli zombi in testa o lo bruci. Non è un'opzione qui. Puoi bruciare il tuo sistema per uccidere il processo zombi, ma non è una soluzione fattibile 😉

Alcune persone suggeriscono di inviare il segnale SIGCHLD al processo genitore. Ma è più probabile che venga ignorato. L'altra opzione per uccidere il processo zombi è uccidere il suo processo padre. Sembra brutale, ma è l'unico modo sicuro per uccidere i processi di zombi.

Quindi, per prima cosa, elenchiamo i processi zombi per conoscere il loro ID. Può essere ottenuto usando il comando ps in questo modo nel terminale.

ps ux | awk '{if($8=="Z+") print}'

L'ottava colonna nell'output del comando ps ux mostra lo stato di un processo. Stai chiedendo di stampare tutte le righe corrispondenti in cui lo stato di un processo è Z+ (che indica lo stato di zombi).

Dopo aver identificato il suo ID processo, otteniamo l'ID processo del genitore.

ps -o ppid= -p <child_id>

In alternativa, puoi combinare i due comandi precedenti nel modo seguente in cui fornisce direttamente il PID del processo zombie e il PID del suo processo padre.

ps -A -ostat,pid,ppid | grep -e '[zZ]'

Qui ottieni l'ID del processo padre, quindi alla fine uccidi il processo digitando la riga di comando con il rispettivo processo ID ottenuto in precedenza.

kill -9 <parent_process_ID>

Puoi verificare se il processo zombie viene interrotto o meno eseguendo di nuovo il comando ps o anche il comando principale.

Congratulazioni! Ora sai come eliminare i processi zombie.

Con i contributi di Abhishek Prakash.

Articolo originale


Linux
  1. Come uccidere un processo zombie su Linux

  2. Cosa sono i processi zombi e come trovare e uccidere i processi zombi?

  3. Come faccio a trovare e terminare un processo in Ubuntu

  4. Linux:trova e uccidi i processi di zombi

  5. Come mettere in pausa/riprendere un processo in Linux

Come trovare e uccidere i processi zombi in CentOS 8

Come trovare l'ID di processo di un programma e ucciderlo [Suggerimento rapido]

Come KILL un processo su Linux

Come trovare il PID e il PPID di un processo in Linux

Come uccidere i processi zombi in Ubuntu

Come uccidere i processi in Linux usando kill, killall e pkill