processos zombies

Llegint una entrada de ILAV vaig recordar que en un fòrum algú va demanar ajuda ja que el seu sistema estava lent, algunes de les solucions s'enfocaven en els processos.

Els principals estats dels processos en Linux són:
Sleeping (S) : Processos que estan esperant el seu torn per executar-se.
Running (R) : Processos que estan en execució.
Waiting (D) : Processos esperant que es finalitzi alguna operació d'entrada / Sortida.
Zombie (Z) : Processos que han acabat però que segueixen apareixent a la taula de processos. Es poden deure a errors de programació i poden ser el símptoma d'un sistema lent o que provoca problemes.

Un procés Zombie és aquell que mai va rebre un senyal per part de l'procés pare que ho crec, un procés fill és aquell que té el seu origen en un procés de nivell superior conegut com a procés pare que és l'encarregat d'enviar els senyals als processos fills generats pel mateix per indicar-los que la seva lapse de vida ha acabat.

Es poden deure a errors de programació i poden ser el símptoma d'un sistema lent o que provoca problemes. Aquesta situació sol passar, també a causa de que alguna configuració no va ser contemplada pel desenvolupador.

A la Wikipedia es pot llegir més sobre aquests processos.

Executant la comanda top podem veure en temps real els processos que s'estan executant en el sistema, i ens indiqués si hi ha algun en estat zombi, però no ens indica com és.

procés

Per veure'ls tots els processos teclejar a la terminal: ps a, I per veure només els zombies: ps -el | grep 'Z'o ps -A -ostat, PPID, pid, cmd | grep -i '^ [Zz]'

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

Z 1945

Si a l'llistar els processos apareix algun amb estat Z, vol dir que és un zombi, la qual cosa al seu torn vol dir que l'aplicació no està bé solucionada o té bugs, sabent el seu PID es pot eliminar executant a la terminal una ordre semblant a, en aquest exemple: 

alf @ Alf ~ $ matar -9 1945

Quan tens molts processos zombi o al menys més d'un, pots fer servir la següent comanda que arrasa amb ells, només serveix per això, si ho executes sense tenir processos zombies no passarà res:

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

Salutacions


Deixa el teu comentari

La seva adreça de correu electrònic no es publicarà. Els camps obligatoris estan marcats amb *

*

*

  1. Responsable de les dades: Miguel Ángel Gatón
  2. Finalitat de les dades: Controlar l'SPAM, gestió de comentaris.
  3. Legitimació: El teu consentiment
  4. Comunicació de les dades: No es comunicaran les dades a tercers excepte per obligació legal.
  5. Emmagatzematge de les dades: Base de dades allotjada en Occentus Networks (UE)
  6. Drets: En qualsevol moment pots limitar, recuperar i esborrar la teva informació.

  1.   correcte va dir

    🙁

  2.   Oscar va dir

    Gràcies, molt bona aportació, vaig a guardar les ordres per fer verificacions periòdiques.

  3.   Josh va dir

    Gràcies, bon article.

  4.   MSX va dir

    Un parell d'aclariments respecte al teu article:

    El terme «procés Zombie» és tècnicament iimpropio i els que tenim una miqueta d'experiència en GNU / Linux hem d'evitar usar-lo ja que en si no hi ha cap procés corrent sinó que és solament la referència a un procés que ja no existeix en el sistema i que no va alliberar el seu identificador.

    Un «procés zombi» és en realitat l'entrada a la taula d'assignacions de l'identificador de l'procés (process descriptor), només això, pel que no consumeixen recursos més enllà d'uns pocs bytes de memòria que utilitza el sistema per portar registre a la taula de processos.

    L'únic problema que pot haver-hi amb els descriptors de registre fantasma (o zombies) és que si aquests spawnean massa ràpid podrien en teoria ocupar tota la taula d'assignació de descriptors de procés deixant a el sistema sense espai perquè nous registres pel que seria potencialment impossible executar nous programes -que registren les seves processos- eventualment penjant la màquina.

    No obstant això això és gairebé impossible que passi ja que en els sistemes de 32 bits hi ha 32767 espais per registrar processos (rarament o mai utilitzats) i el doble en un sistema de 64 bits.

    L'única manera de fer que un sistema de s'atore amb processos morts mal remoguts és creant els processos i matant-los ràpidament sense netejar de forma correcta el descriptor de l'procés (o sigui creant «processos zombies») però, siguem sincers, si algú vol penjar un sistema hi ha formes molt més directes que aquesta. per començar creant nous proesos ràpidament de manera exponencial que atoren el sistema i el pengin; una de les formes d'aconseguir això amb una fork bomb:

    : () {: |: &} ;:

    Es pot fer que el sistema sigui relativament resistent a una fork bomb configurant correctament /etc/security/limits.conf encara que cal tenir en compte que com més limitem la possibilitat de creació de nous processos anem a poder executar menys aplicacions concurrentment en el nostre sistema , però és una eina vàlida per a tot sysadmin paranoic que vulgui tenir un control molt fi sobre els seus sistemes!

    És article té bona informació sobre descriptors de processos invàlids:
    http://www.howtogeek.com/119815/htg-explains-what-is-a-zombie-process-on-linux/
    I en aquest hi ha una explicació clara sobre com funciona una fork bomb: http://stackoverflow.com/questions/991142/how-does-this-bash-fork-bomb-work

    Salu2

    1.    Jotaele va dir

      MSX: «El terme" procés Zombie "és tècnicament iimpropio i els que tenim una miqueta d'experiència en GNU / Linux hem d'evitar usar-lo ...» Ha, ha, ha. Només hi ha una cosa més gran que el teu supèrbia: el teu mal gust. Escolta, és de mal gust que vas fer, si vulguis donar càtedra que et donin una a la facultat, o posa el teu propi bloc i escriu el que vulguis, però venir aquí a corregir-li la plana a el bon Alf de veritat és de mal gust.

      1.    Fernando Rojas va dir

        La veritat em va semblar un comentari força interessant. Molt més que el post

  5.   Platonov va dir

    gràcies molt interessant.

  6.   Rots87 va dir

    excel·lent article gràcies

  7.   Alf va dir

    MSX
    «El terme" procés Zombie "és tècnicament iimpropio i els que tenim una miqueta d'experiència en GNU / Linux hem d'evitar utilitzar-lo»

    Caldrà avisar als desenvolupadors, ja que com veuràs, el terme zombi el fan servir també, aquí ho vaig llegir a la consola.

    Salutacions

  8.   Citux va dir

    Felicitats molt bon article, sempre havia tingut dubte que eren els PZ però mai havia tingut temps d'investigar, ara entro a la pàgina i em topo amb la resposta gràcies .......

  9.   truko22 va dir

    Al KDE amb control + escapament surt activitats de sistema i podem assassinar a aquests zombies ràpidament.

  10.   Pluja va dir

    Una correcció, és procés ZOMBI no ZOMBIE
    Zombie és en anglès
    Zombi en espanyol

  11.   Elynx va dir

    Cars, gràcies !.

  12.   Roberto va dir

    Primer, el terme procés zombi sembla totalment correcte. A més el terme és el menys important.
    El punt és que com indica MSX, i l'acarona wikipedia (lei l'artítculo) el procés zombi aquesta realment mort.
    «Quan un procés acaba, tota la seva memòria i recursos associats a ell es desreferencien, perquè puguin ser usats per altres processos. De tota manera, l'entrada de l'procés en la taula de processos encara roman »
    És a dir, el procés ja no està ocupant recursos de sistema, per tant la càrrega per al sistema és mínima, com explica MSX.
    No obstant això l'única cosa que té és una entrada vàlida a la taula de processos ... .lo qual en cas de ser milers d'elles potser si suposaria una càrrega (després de tot el processador ha de llegir la taula de processos i llegiria molta informació inútil) a més que reflecteix, males pràctiques de programació (algú camina fent aplicacions mal fetes).
    Però en si l'explicació de l'post no és tan correcta i la correcta seria la donada per MSX.