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.
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
🙁
Gràcies, molt bona aportació, vaig a guardar les ordres per fer verificacions periòdiques.
Gràcies, bon article.
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
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.
La veritat em va semblar un comentari força interessant. Molt més que el post
gràcies molt interessant.
excel·lent article gràcies
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
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 .......
Al KDE amb control + escapament surt activitats de sistema i podem assassinar a aquests zombies ràpidament.
Una correcció, és procés ZOMBI no ZOMBIE
Zombie és en anglès
Zombi en espanyol
Cars, gràcies !.
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.