Zombie-proces. Niet iedereen heeft gehoord van dit interessante maar enge woord met betrekking tot het Linux-besturingssysteem. Op een pc vormen zombieprocessen misschien geen bedreiging voor een gewone gebruiker, maar als het om Linux-servers gaat, moeten deze processen worden geïdentificeerd en gestopt.

Dergelijke processen kunnen problemen veroorzaken met de procestabel van uw systeem en op hun beurt de goede werking van uw machine verstoren. Daarom zullen we in dit artikel zombieprocessen in detail bespreken, samen met een uitgebreide gids over het vinden en doden van zombieprocessen op een Linux-machine.

Wat zijn zombieprocessen?

Maar bovenal is het belangrijk dat u weet wat zombieprocessen werkelijk zijn. Dit zijn niets anders dan dode en ter ziele gegane processen die ruimte innemen op de systeemprocestabel. EEN proces controle blok of PCB is een datastructuur die details opslaat die verband houden met individuele processen die op uw systeem worden uitgevoerd.

De procestabel bestaat uit de proces-ID, een link naar de printplaat en andere nuttige informatie met betrekking tot het proces. Zombieprocessen hebben hun eigen proces-ID's en geheugenbeheerinformatie. Omdat het Linux-besturingssysteem een ​​beperkt aantal proces-ID's beschikbaar heeft, kunnen andere processen de PID's pas gebruiken als het zombieproces stopt.

instagram viewer

Hoewel een of twee zombieprocessen geen onderbreking of prestatieproblemen op uw computer veroorzaken, is een een groot aantal van dergelijke processen kan de workflow van uw systeem schaden door de procestabel en het middelen.

Wat veroorzaakt zombieprocessen op Linux?

Om de onderliggende oorzaak van een zombieproces in detail te begrijpen, moet je leren hoe processen starten en stoppen in Linux. Het Linux-besturingssysteem controleert alle actieve processen en daemons op een computer. De procestabel is een lijst met structuren die alle processen bevat die momenteel op uw computer worden uitgevoerd.

Elke procesvermelding in de procestabel bestaat uit een link naar het proces controle blok van dat specifieke proces. De printplaat slaat de details op die bij dat specifieke proces horen. Deze details zijn onder meer:

  1. Processtatus: De huidige status van het proces
  2. Procesnummer: Een uniek nummer dat wordt gebruikt om het proces te identificeren
  3. Programmateller: Bevat informatie met betrekking tot de volgende instructie
  4. Registreert: Lijst met alle CPU-registers die door het proces worden gebruikt
  5. Open de bestandslijst: Bestanden die door het proces worden gebruikt
  6. CPU-planningsinformatie: Bevat informatie die verband houdt met de CPU-tijd en bronnen die aan het proces zijn toegewezen
  7. Informatie over geheugenbeheer: Bevat details over de hoeveelheid geheugen die door het proces wordt gebruikt
  8. I / O-informatie: Lijst met invoer- of uitvoerapparaten die door het proces worden gebruikt

Linux gebruikt de volgende processtaten om al zijn processen te beschrijven.

  • R: Lopend proces
  • S: Slaapproces
  • D: Ononderbroken slaapproces
  • T: Beëindigd proces
  • Z: Zombie-proces

Telkens wanneer een proces de toegewezen taak voltooit, wordt de processtatus ingesteld als Zombie of Z. Elk proces heeft een bovenliggend proces dat een familie van functies aanroept met de naam wacht() dat wacht op de toestandverandering van een proces. Als de processtatus bijvoorbeeld verandert van Rennen naar Zombie, de wacht() methode wordt geactiveerd.

De wacht() method verwijdert gewoonlijk het procesbesturingsblok dat betrekking heeft op dat zombieproces en verwijdert vervolgens de invoer van dat proces uit de procestabel.

Maar soms, vanwege de slechte ontwikkeling van een programma, roept het ouderproces niet het wacht() functie. En als gevolg hiervan verwijdert het systeem de PCB van het zombieproces niet. De vermelding van de procestabel voor dat specifieke proces blijft ook intact.

Dit geeft het zombieproces een oneindige levensduur. Omdat het systeem het proces niet kan beëindigen, wordt de procesvermelding nooit verwijderd en wordt de PID nooit vrijgegeven.

Kom meer te weten: Manieren om niet-reagerende programma's in Linux te doden

Hoe vind je zombieprocessen?

De eerste stap om zombieprocessen op uw systeem te verwijderen, is het analyseren van welk proces de Zombie processtatus. Hoewel u deze processen niet direct kunt beëindigen omdat het systeem ze al uit het geheugen heeft verwijderd, kunt u het bovenliggende proces dat eraan is gekoppeld, beëindigen.

Eerst moet u controleren of de procestabel van uw systeem een ​​zombieproces heeft. U kunt dat eenvoudig doen met de top opdracht. Open gewoon uw terminal en typ:

top

Je zult een output zien die lijkt op deze. Let op het aantal zombieprocessen bovenaan het terminalvenster. Als de uitvoer nul is, hoeft u zich nergens zorgen over te maken.

U kunt informatie met betrekking tot deze zombieprocessen weergeven door middel van piping het ps commando met egrep. Egrep is een uitbreiding van het grep-commando in Linux dat alle patronen behandelt als een uitgebreide regex-string.

Verwant: De beginnershandleiding voor reguliere expressies met Python

Typ de volgende opdracht om alle zombieprocessen weer te geven:

ps aux | egrep "Z | opgeheven"

De bovengenoemde opdracht zoekt naar regels die een van beide bevatten Z of ter ziele in de uitvoer die wordt gegenereerd door het ps-commando. De uitvoer bestaat uit een lijst met de zombieprocessen die op uw systeem worden uitgevoerd.

Zombieprocessen doden met behulp van het kill-commando

Nu u weet welke zombieprocessen momenteel uw systeembronnen opeten, is het tijd om deze processen te beëindigen.

Hoewel de eenvoudigste manier om zombieprocessen te doden, is door uw computer opnieuw op te starten, is dit soms geen haalbare optie, vooral niet als u een server beheert.

Om zombieprocessen te beëindigen zonder uw server uit te schakelen, noteert u de proces-ID van elk zombieproces. Uit het vorige gedeelte kunnen we zien dat de PID van het zombieproces 18614 was. Gebruik vervolgens deze PID om de ID van het bovenliggende proces te vinden.

ps -o ppid = -p 18614

Uitgang:

18613

Controleer of de bovenliggende proces-ID bestaat met behulp van de ps opdracht.

ps -e | grep 18613

Nu we het bestaan ​​van het ouderproces hebben bevestigd, is het tijd om het te beëindigen. Geef de -SIGKILL vlag met de doden commando als volgt:

sudo kill -SIGKILL 18613

Zodra je het bovenliggende proces hebt beëindigd, zal het systeem het zombieproces verwijderen en automatisch uit de procestabel verwijderen.

Processen efficiënt beheren op Linux

Elke systeembeheerder moet prioriteit geven aan monitoringprocessen die op een Linux-machine worden uitgevoerd. Hoewel zombieprocessen niet per se schadelijk zijn voor uw systeem, kunnen ze prestatieproblemen veroorzaken als ze in een groot aantal voorkomen.

Als je een beginnende Linux-gebruiker bent en geen idee hebt hoe het Linux-besturingssysteem processen beheert, is het een goed begin om eerst te leren wat processen zijn.

E-mail
Wat is een proces in Linux?

Het begrijpen van processen en taken is een belangrijk aspect om grip te krijgen op Linux. Dit is wat u moet weten.

Lees Volgende

Gerelateerde onderwerpen
  • Linux
  • Linux
  • Verwerken
Over de auteur
Deepesh Sharma (45 artikelen gepubliceerd)

Deepesh is de Junior Editor voor Linux bij MUO. Hij schrijft al meer dan drie jaar informatieve inhoud op internet. In zijn vrije tijd houdt hij van schrijven, naar muziek luisteren en gitaar spelen.

Meer van Deepesh Sharma

Abonneer op onze nieuwsbrief

Word lid van onze nieuwsbrief voor technische tips, recensies, gratis e-boeken en exclusieve deals!

Nog een stap…!

Bevestig uw e-mailadres in de e-mail die we u zojuist hebben gestuurd.

.