Hoe Kill Zombie Processen op Linux

Nov 25, 2024
Linux
Fatmawati achmad zaenuri / shutterstock

Programma's die slecht zijn geschreven of slecht kunnen uitvoeren, kunnen vertrekken zombieprocessen op de loer in je Linux-computer. Ontdek hoe zombies zijn gemaakt en hoe u ze eindelijk kunt laten rusten.

Hoe Proces-staten werken op Linux

Linux moet natuurlijk alle toepassingen en daemons op uw computer bijhouden. Een van de manieren die dit doet, is door de procestabel te handhaven. Dit is een lijst met structuren in het kernelgeheugen. Elk proces heeft een vermelding in deze lijst met wat informatie over het.

Er is geen grote deal in elk van de processtructuren van het proces. Ze houden de Process-ID , een paar andere gegevensitems en een aanwijzer naar het procesbesturingsblok (PCB) voor dat proces.

Het is de PCB die de vele details bevat Linux moet opkijken of ingesteld voor elk proces. De PCB wordt ook bijgewerkt als een proces wordt aangemaakt, gegeven verwerkingstijd en uiteindelijk vernietigd.

De Linux PCB bevat meer dan 95 velden. Het is gedefinieerd als een structuur genaamd task_struct.h , en het is meer dan 700 regels lang. De PCB bevat de volgende soorten informatie:

  • Processtaat : De staten worden hieronder beschreven.
  • Procesnummer : De unieke identifier binnen het besturingssysteem.
  • Programmateller : Wanneer dit proces de volgende toegang tot de CPU is, zal het systeem dit adres gebruiken om de volgende instructie van het proces te vinden dat moet worden uitgevoerd.
  • Registers : De lijst met CPU-registers die door dit proces worden gebruikt. De lijst kan accumulatoren, indexregisters en stapelwijzers bevatten.
  • Open bestandslijst : Bestanden in verband met dit proces.
  • CPU-planningsinformatie : Gebruikt om te bepalen hoe vaak, en voor hoe lang, CPU-verwerkingstijd wordt toegekend aan dit proces. De prioriteit van het proces, de aanwijzingen tot het plannen van wachtrijen en andere planningsparameters moeten in de PCB worden vastgelegd.
  • Geheugenbeheerinformatie : Details over het geheugen Dit proces gebruikt, zoals de start- en eindadressen van het procesgeheugen en de aanwijzingen op de geheugenpagina's.
  • I / O-statusinformatie : Alle in- of uitvoerapparaten die door het proces worden gebruikt.

De "processtatus" kan een van de volgende zijn:

  • R: Een hardloop- of runnable-proces. Wennende betekenis Het ontvangt CPU-cycli en het uitvoeren. Een runnable-proces is klaar om te rennen en te wachten op een CPU-slot.
  • S: Een slaapproces. Het proces wacht op een actie om te voltooien, zoals een in- of uitgangsbewerking, of voor een resource om beschikbaar te zijn.
  • NS: Het proces bevindt zich in een ononderbroken slaapstatus. Het gebruikt een blokkeersysteemoproep en kan niet doorgaan totdat de systeemgesprekken zijn voltooid. In tegenstelling tot de "Sleep" -staat, reageert een proces in deze toestand niet op signalen totdat de systeemoproep is voltooid en de uitvoering is teruggekeerd naar het proces.
  • T: Het proces is beëindigd (gestopt) omdat het de Sigstop signaal. Het zal alleen reageren naar de Sigkill of Sigcont signalen, die het proces doden of instrueren om respectievelijk door te gaan. Dit is wat er gebeurt als je ruilt voorgrond ( fg ) tot achtergrond ( BG) taken.
  • Z: Een zombieproces. Wanneer een proces is voltooid, verdwijnt het niet alleen. Het bevrijdt elk geheugen dat het gebruikt en verwijdert zichzelf uit het geheugen, maar de invoer in de procestafel en de PCB blijven. De staat is ingesteld op Exit_zombie en het ouderproces wordt op de hoogte gebracht (door de Sigchld signaal) dat het kindproces is voltooid.

In de Zombie-staat noemt het ouderproces een van de wacht() Functies van functies wanneer het kindproces is gemaakt. Vervolgens wacht het op een staatsverandering in het kindproces. Is het kindproces gestopt, voortgezet of gedood door een signaal? Is het beëindigd door de natuurlijke voltooiing van zijn code te doorlopen?

Als de statuswijziging een is die betekent dat het kindproces is gestopt, wordt de exit-code gelezen. Vervolgens wordt de PCB van het kind vernietigd en is de invoering in de procestabel verwijderd. Idealiter gebeurt dit allemaal in een oogwenk, en processen in de zombiestaat bestaan ​​niet erg lang.

VERWANT: Hoe te rennen en achtergrondprocessen op Linux

Wat veroorzaakt zombieprocessen op Linux?

Een slecht geschreven ouderproces kan de wacht() functie wanneer het kindproces is gemaakt. Dit betekent dat er niets waakt voor veranderingen in de staat in het kindproces, en de Sigchld signaal wordt genegeerd. Of misschien beïnvloedt een andere toepassing de uitvoering van het ouderproces, hetzij vanwege slechte programmering of kwaadwillende intentie.

Als het ouderproces echter niet naar de veranderingen in de staat in het kinderproces bekijkt, zal het juiste systeemwoning niet voorkomen. De PCB en het item in de procestabel worden niet verwijderd wanneer het kindproces beëindigt. Dit resulteert in de Zombie-staat die nooit uit de PCB wordt verwijderd.

Zombies gebruiken een beetje geheugen, maar ze vormen meestal geen probleem. De invoer in de procestafel is klein, maar totdat het vrijgegeven is, kan het proces-ID niet opnieuw worden gebruikt. Op een 64-bits besturingssysteem, dat is onwaarschijnlijk dat het onwaarschijnlijk is dat de PCB veel groter is dan het proces van de procestabel.

Een groot aantal zombies kan, denkbaar, van invloed zijn op de hoeveelheid geheugen die gratis is voor andere processen. Als je dat veel zombies hebt, heb je echter een serieus probleem met de moedertoepassing of een bedieningssysteem.

Hoe zombie-processen te verwijderen

Je kunt een zombieproces niet doden omdat het al dood is. Het zal niet reageren op signalen omdat het uit het geheugen is verwijderd - er is nergens om een ​​te verzenden Sigkill signaal. Je kunt proberen het verzenden van de Sigchld Signaal naar het ouderproces, maar als het niet werkte toen het kindproces beëindigd, is het waarschijnlijk niet, ook.

De enige betrouwbare oplossing is om het ouderproces te doden. Wanneer het is beëindigd, worden de kindprocessen geërfd door de in het Proces, dat is het eerste proces dat wordt uitgevoerd in een Linux-systeem (het proces-ID is 1).

De in het Het proces voert regelmatig de nodige opruimen van zombies uit, dus om ze te doden, moet je gewoon het proces doden dat ze heeft gemaakt. De bovenkant opdracht is een handige manier om te zien of u zombies hebt.

Typ het volgende:

  Top  

Dit systeem heeft acht zombieprocessen. We kan deze vermelden Door de ps opdracht en leidt het in egrep . Nogmaals, zombie-processen hebben een vlag van de staat van "Z" en zul je meestal ook "overlijden" zien.

Typ het volgende:

 PS AUX | egrep "Z | Defunct" 

De zombieprocessen worden vermeld.

Dit is een netweg om de proces-ID's van zombies te ontdekken dan heen en weer door te gaan bovenkant . We zien ook dat een applicatie "badprg" deze zombies heeft genoemd.

De proces-ID van de eerste zombie is 7641, maar we moeten het proces-ID van zijn ouderproces vinden. We kunnen dit doen door te gebruiken ps opnieuw. We gebruiken de uitvoeroptie ( -O ) vertellen ps om alleen het proces-ID van de ouder weer te geven en vervolgens door te geven met de ppid = vlag.

Het proces dat we willen vinden, worden aangegeven met behulp van de -P (Process) optie en passeert vervolgens het proces-ID van de zombie.

Daarom typen we de volgende opdracht om de procesinformatie op te zoeken voor proces 7641, maar het zal alleen de ID van het ouderproces rapporteren:

 PS -O PPID = -P 7641 

We zijn verteld dat de Ouderproces-ID 7636 is. We kunnen dit nu verwezen worden door dit te gebruiken ps nog een keer.

We zien dit overeenkomt met de naam van het ouderproces van eerder. Om het ouderproces te doden, gebruik dan de optie Sigkill met de Kill-opdracht als volgt:

 Kill -Sigkill 7636 

Afhankelijk van de eigenaar van het ouderproces, moet u mogelijk ook gebruiken sudo .

Zombies zijn niet eng ...

... tenzij ze in een massale horde zijn. Enkelen zijn er niet meer zorgen over en een eenvoudige herstart wordt ze weggegaan.

Als u echter merkt dat een toepassing of proces altijd pawning zombies is, is dat iets waar u in moet kijken. Het is waarschijnlijk een slordig geschreven programma, in welk geval, misschien is er een bijgewerkte versie die op de juiste manier opruimt na zijn kindprocessen.


Linux - Meest populaire artikelen

Het beste Linux distributies Zonder systemd

Linux Feb 24, 2025

Bmj / shutterstock.com Wanneer de dominante Linux-distributies zijn goedgekeurd systeem , Overschrijdt gevorkte distributies en startte nieuwe proje..


Hoe gebruiken “Hier documenten” in Bash op Linux

Linux Mar 31, 2025

Fatmawati achmad zaenuri / shutterstock De vreemd genoemde "hier documenten" laat u invoer / uitverwijderingen in de bash-scripts op Linux gebruiken. Ze zijn e..


5 Specialized Linux distributies met unieke eigenschappen

Linux Jul 20, 2025

Het lezen van de cartoonishlish lange lijst van bestaande Linux-districten, de diverse smaken en de off-shoots van off-shoots beginnen allemaal samen te vagen. Om dat te verhelpen, hebben ..


Wat is nieuw in Linux Kernel 5.14

Linux Sep 9, 2025

Sean Locke Photography / Shutterstock Aangezien Linux 30 jaar oud is, is Kernel 5.14 vrijgegeven. Het bevat het gebruikelijke brede aanbod van interne onder-de..


Hoe DNS in Linux te spoelen

Linux Nov 14, 2024

Is uw browse -ervaring op internet langzaam op uw Linux -apparaat, of zijn de websites die u verouderd of de verkeerde website bezoekt? Laten we het doorspoelen van de DNS -cache op Linux bespr..


Hoe om te gaan met spaties in bestandsnamen op Linux

Linux Dec 14, 2024

Zoals de meeste besturingssystemen ondersteunt Linux bestandsnamen met spaties erin. Maar het gebruik van deze bestandsnamen op de opdrachtregel is niet altijd eenvoudig. Hier zijn verschillend..


Hoe toepassingen en scripts te integreren in een Linux -bureaublad

Linux Oct 10, 2025

Op Linux zal een applicatie zonder een desktopbestand niet integreren met uw desktopomgeving. De meeste applicaties bieden één, maar af en toe moet u er een maken. Het is vrij eenvoudig, volg..


7 fouten nieuwe Linux -gebruikers maken (en hoe ze ze te vermijden)

Linux Nov 11, 2024

Het leren van Linux kan een frustrerende ervaring zijn waarbij alles wat klein is als een gevecht. Het vermijden van deze veel voorkomende fouten maakt uw introductie en acceptatie van Linux ve..


Categorieën