Processi zombi

Leggere una voce da vivace Mi sono ricordato che in un forum qualcuno ha chiesto aiuto poiché il suo sistema era lento, alcune delle soluzioni si concentravano sui processi.

Gli stati principali dei processi in Linux sono:
Dormire (S) : Processi in attesa di essere eseguiti.
In esecuzione (R) : Processi in esecuzione.
In attesa (D) : Processi in attesa del completamento di un'operazione di entrata / uscita.
Zombi (Z) : Processi terminati ma che continuano a essere visualizzati nella tabella dei processi. Possono essere causati da errori di programmazione e possono essere un sintomo di un sistema lento o che causa problemi.

Un processo Zombie è quello che non ha mai ricevuto un segnale dal processo genitore che lo ha creato, un processo figlio è quello che ha la sua origine in un processo di livello superiore noto come processo genitore responsabile dell'invio dei segnali ai processi figli generati da per indicare che la loro durata di vita è terminata.

Possono essere causati da errori di programmazione e possono essere un sintomo di un sistema lento o che causa problemi. Questa situazione di solito si verifica, anche perché alcune configurazioni non erano state previste dallo sviluppatore.

In Wikipedia puoi Per saperne di più su questi processi.

Eseguendo il comando in alto possiamo vedere in tempo reale i processi che sono in esecuzione nel sistema, e indicherà se ce ne sono in uno stato zombie, ma non indica quale sia.

processo

Per vedere tutti i processi, digita nel terminale: ps auxe per vedere solo gli zombi: ps -el | grep 'Z'o ps -A -ostat, ppid, pid, cmd | grep -e '^ [Zz]'

alf @ Alf ~ $ ps -A -ostat, ppid, pid, cmd | grep -e '^ [Zz]'

Z 1945

Se quando si elencano i processi, uno appare con lo stato Z, significa che è uno zombie, il che a sua volta significa che l'applicazione non è ben risolta o ha dei bug, sapendo che il suo PID può essere eliminato eseguendo nel terminale un comando simile a , in questo esempio: 

alf @ Alf ~ $ kill -9 1945

Quando hai molti processi zombi o almeno più di uno, puoi usare il seguente comando che li uccide, funziona solo per quello, se lo esegui senza avere processi zombi non succederà nulla:

alf @ Alf ~ $ sudo kill -HUP `ps -A -ostat, ppid, pid, cmd | grep -e '^ [Zz]' | awk '{print $ 2}' ''

saluti


Lascia un tuo commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati con *

*

*

  1. Responsabile dei dati: Miguel Ángel Gatón
  2. Scopo dei dati: controllo SPAM, gestione commenti.
  3. Legittimazione: il tuo consenso
  4. Comunicazione dei dati: I dati non saranno oggetto di comunicazione a terzi se non per obbligo di legge.
  5. Archiviazione dati: database ospitato da Occentus Networks (UE)
  6. Diritti: in qualsiasi momento puoi limitare, recuperare ed eliminare le tue informazioni.

  1.   corretto suddetto

    🙁

  2.   Oscar suddetto

    Grazie, ottimo contributo, salverò i comandi per effettuare verifiche periodiche.

  3.   Josh suddetto

    Grazie, bell'articolo.

  4.   msx suddetto

    Un paio di chiarimenti sul tuo articolo:

    Il termine "processo Zombie" è tecnicamente inappropriato e quelli di noi che hanno una piccola esperienza con GNU / Linux dovrebbero evitare di usarlo poiché non esiste un processo in esecuzione di per sé ma è solo un riferimento a un processo che non esiste più nel sistema e non ha rilasciato il suo identificativo.

    Un "processo zombie" è in realtà la voce nella tabella di mappatura dell'identificatore di processo (descrittore di processo), solo questo, quindi non consuma risorse oltre a pochi byte di memoria che il sistema utilizza per tenere traccia del tabella dei processi.

    L'unico problema che potrebbe esserci con i descrittori di registro fantasma (o zombi) è che se si generano troppo velocemente potrebbero teoricamente occupare l'intera tabella di allocazione dei descrittori di processo lasciando il sistema senza spazio per nuovi record quindi sarebbe potenzialmente impossibile eseguire nuovi programmi -che registrano i loro processi- eventualmente appendere la macchina.

    Tuttavia, ciò è quasi impossibile poiché nei sistemi a 32 bit ci sono 32767 spazi per registrare i processi (raramente o mai usati) e il doppio in un sistema a 64 bit.

    L'unico modo per bloccare un sistema con processi morti rimossi malamente è creare i processi e ucciderli rapidamente senza pulire adeguatamente il descrittore del processo (cioè creare "processi zombi") ma, ammettiamolo, se qualcuno vuole bloccare un sistema ci sono modi molto più diretti di quello. iniziare a creare rapidamente nuovi processi in modo esponenziale che bloccano il sistema e lo bloccano; uno dei modi per ottenere questo risultato con una bomba a forcella:

    : () {: |: &};:

    È possibile rendere il sistema relativamente resistente a una fork bomb configurando correttamente /etc/security/limits.conf, anche se si deve tenere conto che più limitiamo la possibilità di creare nuovi processi, saremo in grado di eseguire meno applicazioni contemporaneamente sul nostro sistema, tuttavia è uno strumento valido per tutti i sysadmin paranoici che vogliono avere un controllo molto preciso sui loro sistemi!

    Questo articolo contiene buone informazioni sui descrittori di processo non validi:
    http://www.howtogeek.com/119815/htg-explains-what-is-a-zombie-process-on-linux/
    E in questo c'è una chiara spiegazione di come funziona una bomba a forcella: http://stackoverflow.com/questions/991142/how-does-this-bash-fork-bomb-work

    Salu2

    1.    jotaele suddetto

      msx: «Il termine" processo Zombie "è tecnicamente inappropriato e quelli di noi che hanno una piccola esperienza con GNU / Linux dovrebbero evitare di usarlo ...» Ah ah ah. C'è solo qualcosa di più grande del tuo orgoglio: il tuo cattivo gusto. Ehi, è di cattivo gusto quello che hai fatto, se vuoi tenere una conferenza, prenderne una in facoltà, o mettere il tuo blog e scrivere quello che vuoi, ma venire qui a correggere l'appartamento al buon Alf è davvero di cattivo gusto.

      1.    Ferdinando Rojas suddetto

        La verità mi è sembrata un commento piuttosto interessante. Molto di più del post

  5.   platonov suddetto

    grazie molto interessante.

  6.   marcisce87 suddetto

    ottimo articolo grazie

  7.   Alf suddetto

    msx
    «Il termine" processo Zombie "è tecnicamente inappropriato e quelli di noi che hanno una piccola esperienza in GNU / Linux dovrebbero evitare di usarlo»

    Dovremo avvisare gli sviluppatori, dato che come vedrete viene utilizzato anche il termine zombie, lì l'ho letto su console.

    saluti

  8.   Città suddetto

    Complimenti, ottimo articolo, avevo sempre avuto dubbi che fossero i PZ ma non avevo mai avuto il tempo di approfondire, ora vado sulla pagina e mi imbatto nella risposta grazie …….

  9.   camion22 suddetto

    In KDE con controllo + sistema di fuga le attività vengono disattivate e possiamo uccidere rapidamente quegli zombi.

  10.   Pioggia suddetto

    Una correzione, è un processo ZOMBIE, non ZOMBIE
    Zombie è in inglese
    Zombi in spagnolo

  11.   elynx suddetto

    Lusso, grazie!

  12.   Roberto suddetto

    In primo luogo, il termine processo zombie sembra totalmente corretto. Anche il termine è il meno importante.
    Il punto è che, come indica msx, e lo stesso wikipedia (ho letto l'articolo) il processo zombie è davvero morto.
    «Quando un processo finisce, tutta la sua memoria e le risorse associate vengono dereferenziate, in modo che possano essere utilizzate da altri processi. Ad ogni modo, la voce di processo nella tabella di processo rimane ancora »
    Cioè, il processo non occupa più le risorse di sistema, quindi il carico sul sistema è minimo, come spiegato da msx.
    Tuttavia, l'unica cosa che ha è una voce non valida nella tabella dei processi ... che, se ce ne sono migliaia, forse sarebbe un carico (dopotutto, il processore deve leggere la tabella dei processi e leggerebbe molte informazioni inutili) oltre a riflettere cattive pratiche di programmazione (qualcuno sta realizzando applicazioni di scarsa qualità).
    Ma di per sé la spiegazione del post non è così corretta e quella corretta sarebbe quella data da msx.