Zombieprocesser

Läser ett bidrag från livlig Jag kom ihåg att någon i ett forum bad om hjälp eftersom deras system var långsamt, några av lösningarna fokuserade på processer.

De viktigaste tillstånden för processerna i Linux är:
Sovande (S) : Processer som väntar på att deras tur ska köras.
Löpning (R) : Processer som körs.
Väntar (D) : Processer som väntar på att en Entry / Exit-operation ska slutföras.
Zombie (Z) : Processer som har avslutats men fortsätter att visas i procestabellen. De kan orsakas av programmeringsfel och kan vara ett symptom på ett långsamt eller problemframkallande system.

En Zombie-process är en som aldrig fick en signal från den överordnade processen som skapade den, en barnprocess är en som har sitt ursprung i en högre nivåprocess som kallas föräldraprocessen som är ansvarig för att skicka signalerna till barnprocesserna som genereras av det för att indikera att deras livslängd har upphört.

De kan orsakas av programmeringsfel och kan vara ett symptom på ett långsamt eller problemframkallande system. Denna situation inträffar vanligtvis också för att någon konfiguration inte övervägdes av utvecklaren.

På Wikipedia kan du läs mer om dessa processer.

Genom att utföra det översta kommandot kan vi i realtid se de processer som körs i systemet, och det kommer att indikera om det finns någon i zombie-tillstånd, men det anger inte vilken som är.

process

För att se alla processer, skriv in terminalen: ps aux, och att bara se zombierna: 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

Om man, när man listar processerna, visas med Z-status, betyder det att det är en zombie, vilket i sin tur betyder att applikationen inte är väl löst eller har buggar, eftersom man vet att dess PID kan elimineras genom att utföra ett kommando som liknar, i terminalen, i detta exempel: 

alf @ Alf ~ $ döda -9 1945

När du har många zombieprocesser eller åtminstone mer än en, kan du använda följande kommando som dödar dem, det fungerar bara för det, om du kör det utan att ha zombieprocesser kommer ingenting att hända:

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

hälsningar


Lämna din kommentar

Din e-postadress kommer inte att publiceras. Obligatoriska fält är markerade med *

*

*

  1. Ansvarig för uppgifterna: Miguel Ángel Gatón
  2. Syftet med uppgifterna: Kontrollera skräppost, kommentarhantering.
  3. Legitimering: Ditt samtycke
  4. Kommunikation av uppgifterna: Uppgifterna kommer inte att kommuniceras till tredje part förutom enligt laglig skyldighet.
  5. Datalagring: databas värd för Occentus Networks (EU)
  6. Rättigheter: När som helst kan du begränsa, återställa och radera din information.

  1.   rätt sade

    🙁

  2.   oscar sade

    Tack, mycket bra bidrag, jag kommer att spara kommandona för att göra periodiska verifieringar.

  3.   Josh sade

    Tack, trevlig artikel.

  4.   MSX sade

    Ett par förtydliganden angående din artikel:

    Uttrycket "Zombie-process" är tekniskt olämpligt och de av oss som har lite erfarenhet av GNU / Linux bör undvika att använda det eftersom det inte finns någon process som körs i sig, men det är bara en referens till en process som inte längre finns i systemet och han släppte inte sin identifierare.

    En "zombieprocess" är faktiskt posten i kartläggningstabellen för processidentifieraren (processbeskrivare), just det, så det förbrukar inte resurser utöver några byte minne som systemet använder för att hålla reda på procestabellen.

    Det enda problemet som kan finnas med ghost (eller zombie) registerbeskrivare är att om de gyter för fort skulle de teoretiskt kunna uppta hela tilldelningstabellen för processdeskriptor och lämna systemet utan utrymme för nya poster så det skulle potentiellt vara omöjligt att köra nya program -som registrerar sina processer- så småningom hänger maskinen.

    Detta är dock nästan omöjligt att hända eftersom det i 32-bitars system finns 32767 64 utrymmen för registrering av processer (sällan eller aldrig används) och dubbelt så mycket i ett XNUMX-bitars system.

    Det enda sättet att få ett system att krascha med döda processer som är avlägsnade är att skapa processerna och döda dem snabbt utan att korrekt rengöra processbeskrivaren (det vill säga skapa "zombieprocesser") men låt oss inse det, om någon vill hänga system finns det mycket mer direkta sätt än så. att snabbt skapa nya processer på ett exponentiellt sätt som fastnar i systemet och hänger det; ett av sätten att uppnå detta med en gaffelbomb:

    : () {: |: &};:

    Du kan göra systemet relativt motståndskraftigt mot en gaffelbomb genom att konfigurera /etc/security/limits.conf korrekt, även om det måste tas i beaktande att ju mer vi begränsar möjligheten att skapa nya processer kommer vi att kunna köra färre applikationer samtidigt på vårt system. Det är dock ett giltigt verktyg för alla paranoida sysadmin som vill ha en mycket fin kontroll över sina system!

    Den här artikeln har bra information om ogiltiga processbeskrivare:
    http://www.howtogeek.com/119815/htg-explains-what-is-a-zombie-process-on-linux/
    Och i detta finns en tydlig förklaring till hur en gaffelbomb fungerar: http://stackoverflow.com/questions/991142/how-does-this-bash-fork-bomb-work

    Salu2

    1.    jotaele sade

      msx: «Uttrycket" Zombie-process "är tekniskt olämpligt och de av oss som har lite erfarenhet av GNU / Linux bör undvika att använda det ...» Ha ha ha. Det finns bara något större än din stolthet: din dåliga smak. Hej, vad du gjorde är i dålig smak, om du vill hålla en föreläsning, skaffa en på fakulteten, eller sätt din egen blogg och skriv vad du vill, men att komma hit för att korrigera lägenheten till den goda Alf är verkligen i dålig smak .

      1.    Ferdinand Rojas sade

        Sanningen tycktes mig vara en ganska intressant kommentar. Mycket mer än inlägget

  5.   platonov sade

    tack väldigt intressant.

  6.   Rötter87 sade

    utmärkt artikel tack

  7.   Alf sade

    MSX
    «Termen" Zombieprocess "är tekniskt olämplig och de av oss som har lite erfarenhet av GNU / Linux bör undvika att använda den»

    Vi måste meddela utvecklarna, eftersom termen zombie används som ni ser, där läste jag den på konsolen.

    hälsningar

  8.   Stad sade

    Grattis, mycket bra artikel, jag hade alltid tvivlat på att de var PZ: erna men jag hade aldrig haft tid att undersöka, nu går jag till sidan och jag stöter på svaret, tack ...….

  9.   truko22 sade

    I KDE med control + escape-system går aktiviteter ut och vi kan snabbt döda dessa zombier.

  10.   Regn sade

    En korrigering, det är en ZOMBIE inte en ZOMBIE-process
    Zombie är på engelska
    Zombi på spanska

  11.   elynx sade

    Lyx, tack!

  12.   Roberto sade

    För det första verkar termen zombieprocess helt korrekt. Termen är också minst viktig.
    Poängen är att som msx indikerar, och samma wikipedia (jag läste artikeln) är zombieprocessen verkligen död.
    «När en process är klar, hänvisas allt dess minne och tillhörande resurser så att de kan användas av andra processer. Hur som helst, processinmatningen i procestabellen kvarstår fortfarande »
    Processen tar inte längre upp systemresurser, därför är belastningen på systemet minimal, vilket förklaras av msx.
    Det enda det har är en ogiltig post i procestabellen ... som, om det finns tusentals av dem, kanske det skulle vara en belastning (trots allt måste processorn läsa procestabellen och den skulle läsa en mycket värdelös information) förutom att återspegla dåliga programmeringsmetoder (någon gör dåligt gjorda applikationer).
    Men i sig är förklaringen till inlägget inte så korrekt och den korrekta skulle vara den som ges av msx.