Lär dig Linux

Hur man dödar Zombie-processer i Linux

Hur man dödar Zombie-processer i Linux

En zombieprocess i Linux hänvisar till de redan döda processerna men på ett eller annat sätt finns de fortfarande i processtabellen i systemet. Klyftan är att denna process av någon anledning inte rensades av föräldern från processtabellen. Vanligtvis händer detta när genomförandeprocessen är klar.

Det vanliga sättet att fungera i Linux är att när en process har slutfört sin körning, meddelar den sin förälder, som är ansvarig för att ta bort processen från tabellen. Tyvärr kan föräldern inte ta bort processen från minnet i de fall föräldern inte kan läsa barnets status. Så här blir det att vi har döda processer i processtabellen. Det här är vad vi kallar zombieprocesserna.

Vad orsakar Linux Zombie-processer?

När barnprocessen skapas kan en dåligt skriven föräldraprocess misslyckas med att anropa funktionen wait (). Som ett resultat kommer dess zombiebarn att dröja kvar i minnet tills de slocknar.

Detta innebär att ingenting övervakar spädbarnsprocessen för tillståndsförändringar och SIGCHLD-signalen kommer att ignoreras. Kanske stör en annan applikation den överordnade processens exekvering, antingen genom elak programmering eller skadlig avsikt.

Korrekt systemhushållning kommer inte att ske om den överordnade processen inte tittar på tillståndsförändringar i barnprocessen.

När spädbarnsprocessen är klar kommer PCB och posten i procestabellen inte att tas bort. Zombietillståndet tas aldrig bort från PCB som ett resultat av detta.

Zombier har lite minne, men det är vanligtvis inte ett problem. Eftersom Linux-system har ett begränsat antal PID: er (om än ett stort antal), om tillräckligt med PID är zombied, kan ingen annan process starta. Det är tveksamt om detta kommer att hända.

Men zombied processer tyder på att något har gått fel med en applikation och att ett specifikt program kan ha en bugg.
Programvarufel i datacenter ska inte tolereras och måste åtgärdas.
Du bör hålla ett öga på och förstöra zombieprocesser tills felet är åtgärdat.

Process-ID: t kan inte återanvändas förrän det startas, så processtabellens post är liten.
Eftersom kretskortet är mycket större än processtabellens inmatning i ett 64-bitars operativsystem, är det osannolikt att det orsakar några problem.

Mängden minne tillgängligt för andra processer kan påverkas av ett stort antal zombier. Men om du har så många zombies har du ett allvarligt problem med den överordnade applikationen eller ett fel i operativsystemet.

Så vad gör du när ett förfarande blir en zombie? Du spårar och eliminerar zombieprocesserna.

Hur man hittar en zombieprocess?

Det första stoppet för att döda en zombieprocess i systemet är först att identifiera den. Eftersom init-processen städas upp efter zombies regelbundet, är allt du behöver göra för att bli av med dem att förstöra processen som skapade dem.

Det översta kommandot är ett snabbt sätt att se om det finns några zombier i ditt område. För att uppnå detta kommer vi att utföra följande kommando.

topp

toppkommandoresultat

Antalet zombieprocesser i detta system visas på utdata. I vårt fall ovan har vi 0 zombies.
Med hjälp av kommandot ps och rör det till egrep kan vi få en lista över dem. Statens flagga för zombieprocesser är "Z" och ibland kommer du också att se "nedlagda".

tuts @ fosslinux: ~ $ ps aux | egrep "Z | defunct"

Statens flagga för zombieprocesser är Z eller avstängd

Låt oss bryta ner de olika delarna av detta kommando.

Z i STAT-kolumnen i utdata identifierar en zombieprocess.
[defunct] i den sista (COMMAND) kolumnen i utdata identifierar också en zombie-process.

Helst är det inte möjligt att döda en Zombie-process eftersom den är död. Istället meddelar vi föräldern att försöka läsa barnets processstatus och slutligen rengöra dem från systemets bord. För att utlösa denna process skickar vi en SIGCHLD-signal till processens förälder. Att identifiera det överordnade process-ID: n eller vad som kallas PID innebär att du kör följande kommando:

tuts @ fosslinux: ~ $ ps -o ppid = 

Identifiera överordnat process-ID

Efter att ha fått Zombie's PID, använd kommandot SIGCHLD-signal till de tidigare identifierade överordnade processerna.

tuts @ fosslinux: ~ $ kill -s SIGCHLD 

använd kommandot SIGCHLD-signal

I vissa fall rensas inte Zombie-processen. Detta kallar oss att delta i plan b eller c. Det föregående innebär att man startar om föräldraprocessen eller dödar föräldrarna. Å andra sidan handlar de senare fallen om att starta om systemet, särskilt när Zombie-processen kan orsaka ett avbrott eller en massiv ökning på grund av Zombie-processen.

Nedan finns kommandot att döda föräldraprocessen.

tuts @ fosslinux: ~ $ kill -9 

kommando för att döda föräldraprocessen

Om en föräldraprocess dödas dödas också alla föräldrarnas barnprocesser. Om en av barnprocesserna är kritisk vid en viss tidpunkt kan du behöva skjuta upp dödandet tills det är säkert. Å andra sidan kan en snabb dubbelkontroll berätta hur mycket minne eller processorkraft Zombie-processerna förbrukar. Detta hjälper till att avgöra om det bättre alternativet är att döda moderprocessorn för att göra omstart av systemet i följande cykel av systemunderhållet som redan är schemalagt.

På Linux, hur fungerar processtillstånd?

Naturligtvis måste Linux hålla reda på alla applikationer och demoner som körs på din dator. Att underhålla processtabellen är ett av sätten att uppnå detta.
Detta är en lista över kärnminnestrukturer. Denna lista innehåller en post för varje process som innehåller lite information om den. Var och en av processtabellstrukturerna innehåller väldigt lite information.

De lagrar process-ID, några andra bitar av information och en pekare till processkontrollblocket (PCB).

PCB är där Linux lagrar all information den behöver för att leta upp eller ställa in för varje process. När en process skapas modifieras den, ges bearbetningstid och förstörs sedan.

Det finns över 95 fält på Linux PCB. Det definieras i uppgiftsstrukturen, som är över 700 linjer lång. Följande typer av information finns på PCB:

Processens tillstånd illustreras nedan

Något av följande kan vara "Processstatus":

Slutsats

Såvida de inte är en del av en stor hord, är Zombies inte så skadliga. Några är inte en stor sak, och en snabb omstart kommer att rensa dem. Det finns dock en sak att tänka på.

Linux-arkitekturer har ett maximalt antal processer och som ett resultat ett maximalt antal process-ID-nummer. När en dators maximala antal zombieprocesser uppnås kan nya processer inte startas.

Zombieprocesser är inte processer; de är resterna efter döda processer som deras föräldraprocess inte har rensat korrekt. Men om du märker att en viss applikation eller process ständigt leker zombier, bör du undersöka det vidare.

Troligtvis är det bara ett dåligt skrivet program; i så fall kanske det finns en uppdaterad version som rensar upp efter att barnet har behandlat ordentligt.

Hur man förbättrar FPS i Linux?
FPS står för Bildrutor per sekund. FPS: s uppgift är att mäta bildfrekvensen i videouppspelningar eller spelprestanda. Med enkla ord betecknas antalet...
De bästa Oculus App Lab-spelen
Om du är Oculus-headsetägare måste du vara förtjust i sidoladdning. Sideladdning är processen för att installera icke-butiksinnehåll på ditt headset. ...
Topp 10 spel att spela på Ubuntu
Windows-plattformen har varit en av de dominerande plattformarna för spel på grund av den enorma andelen spel som utvecklas idag för att stödja Window...