Zombieprocess. Inte alla har hört talas om detta intressanta men skrämmande ord relaterat till Linux-operativsystemet. På en persondator kan zombieprocesser inte utgöra ett hot mot en vanlig användare, men när det gäller Linux-servrar måste dessa processer identifieras och stoppas.
Sådana processer kan orsaka problem med ditt systems processtabell och i sin tur manipulera med att maskinen fungerar korrekt. I den här artikeln kommer vi därför att diskutera zombieprocesser i detalj, tillsammans med en omfattande guide för att hitta och döda zombieprocesser på en Linux-maskin.
Vad är zombieprocesser?
Men innan allt detta är det viktigt att du vet vad zombieprocesser verkligen är. Dessa är inget annat än döda och nedlagda processer som upptar utrymme i systemets processbord. A processkontrollblock eller PCB är en datastruktur som lagrar detaljer associerade med enskilda processer som körs på ditt system.
Processtabellen består av process-ID, en länk till PCB och annan användbar information relaterad till processen. Zombie-processer har sina egna process-ID och minneshanteringsinformation. Eftersom Linux OS har ett begränsat antal tillgängliga process-ID kan andra processer inte använda PID förrän zombie-processen slutar.
Även om en eller två zombieprocesser inte kommer att orsaka störningar eller prestandaproblem på din dator, a ett stort antal sådana processer kan skada ditt systems arbetsflöde genom att översvämma procestabellen och Resurser.
Vad orsakar zombieprocesser på Linux?
För att förstå den underliggande orsaken till en zombieprocess i detalj måste du lära dig hur processer startar och stoppar i Linux. Operativsystemet Linux övervakar alla körprocesser och demoner på en dator. De processbord är en lista över strukturer som innehåller alla processer som för närvarande körs på din maskin.
Varje processpost i procestabellen består av en länk till processkontrollblock av den specifika processen. PCB lagrar informationen som är associerad med just den processen. Dessa detaljer inkluderar:
- Processläge: Det aktuella läget för processen
- Processnummer: Ett unikt nummer som används för att identifiera processen
- Programräknare: Innehåller information relaterad till nästa instruktion
- Register: Lista över alla CPU-register som används av processen
- Öppna fillistan: Filer som används av processen
- CPU-schemaläggningsinformation: Innehåller information som är associerad med CPU-tid och resurser som tilldelats processen
- Information om minneshantering: Innehåller detaljer om mängden minne som används av processen
- I / O-information: Lista över in- eller utmatningsenheter som används av processen
Linux använder följande processlägen för att beskriva alla dess processer.
- R: Körprocess
- S: Sovprocess
- D: Avbrottsfri sömnprocess
- T: Avslutad process
- Z: Zombieprocess
När en process slutför den uppgift som tilldelats ställs dess processläge in som Zombie eller Z. Varje process har en överordnad process som kallar en familj av funktioner namngiven vänta() som väntar på tillståndsförändringen av en process. Till exempel om processläget ändras från Löpning till Zombie, den vänta() metod utlöses.
De vänta() metoden raderar vanligtvis processkontrollblocket relaterat till den zombieprocessen och tar sedan bort inmatningen av processen från procestabellen.
Men ibland, på grund av den dåliga utvecklingen av ett program, kallar inte föräldraprocessen vänta() fungera. Och som ett resultat tar systemet inte bort kretskortet för zombieprocessen. Processtabellposten för den specifika processen förblir också intakt.
Detta ger zombieprocessen en oändlig livslängd. Eftersom systemet inte kan döda processen raderas aldrig processinmatningen och PID frigörs aldrig.
Läs mer: Sätt att döda program som inte svarar i Linux
Hur hittar jag zombieprocesser?
Det första steget för att ta bort zombieprocesser på ditt system är att analysera vilken process som har Zombie processläge. Även om du inte kommer att kunna döda dessa processer direkt eftersom systemet redan har tagit bort dem från minnet, kan du döda den överordnade processen som är associerad med dem.
Först måste du kontrollera om ditt systems processtabell har en zombieprocess. Du kan göra det enkelt med hjälp av topp kommando. Öppna bara din terminal och skriv:
topp
Du ser en utdata som liknar den här. Lägg märke till antalet zombieprocesser högst upp i terminalfönstret. Om utdata är noll har du inget att oroa dig för.
Du kan lista information relaterad till dessa zombieprocesser genom piping ps-kommandot med egrep. Egrep är en förlängning av grep-kommandot i Linux som behandlar alla mönster som en utökad regexsträng.
Relaterad: Nybörjarhandboken för vanliga uttryck med Python
Skriv följande kommando för att lista alla zombieprocesser:
ps aux | egrep "Z | defunct"
Det ovannämnda kommandot kommer att leta efter rader som innehåller endera Z eller upphört i utgången som genereras av ps-kommandot. Utdata består av en lista över zombieprocesser som körs på ditt system.
Döda zombieprocesser med hjälp av dödkommandot
Nu när du vet vilka zombieprocesser som för närvarande äter bort dina systemresurser är det dags att döda dessa processer.
Det enklaste sättet att döda zombieprocesser är att starta om din dator, men ibland är detta inte möjligt, särskilt om du administrerar en server.
För att döda zombieprocesser utan att stänga av din server, anteckna process-ID för alla zombieprocesser. Från föregående avsnitt kan vi se att zombieprocessens PID var 18614. Använd sedan denna PID för att hitta ID för den överordnade processen.
ps -o ppid = -p 18614
Produktion:
18613
Kontrollera om det överordnade process-ID-numret finns med ps kommando.
ps -e | grep 18613
Nu när vi har bekräftat förekomsten av föräldraprocessen är det dags att döda den. Skicka -SIGKILL flagga med döda kommandot enligt följande:
sudo kill -SIGKILL 18613
När du har dödat föräldraprocessen kommer systemet att ta bort zombieprocessen och ta bort den automatiskt från processtabellen.
Hantera processer effektivt på Linux
Varje systemadministratör måste prioritera övervakningsprocesser som körs på en Linux-maskin. Även om zombieprocesser inte nödvändigtvis är skadliga för ditt system kan de orsaka prestandaproblem om de finns i ett stort antal.
Om du är en nybörjare av Linux-användare och inte har någon aning om hur Linux-operativsystemet hanterar processer är det ett bra ställe att börja lära sig vad som är processer först.
Förståelse för processer och jobb är en nyckelaspekt för att ta itu med Linux. Här är vad du behöver veta.
Läs Nästa
- Linux
- Linux
- Bearbetning
Deepesh är Junior Editor för Linux på MUO. Han har skrivit informationsinnehåll på internet i över 3 år. På fritiden tycker han om att skriva, lyssna på musik och spela gitarr.
Prenumerera på vårt nyhetsbrev
Gå med i vårt nyhetsbrev för tekniska tips, recensioner, gratis e-böcker och exklusiva erbjudanden!
Ett steg till…!
Bekräfta din e-postadress i e-postmeddelandet som vi just skickade till dig.