Leer Linux

Hoe Zombie-processen in Linux te doden

Hoe Zombie-processen in Linux te doden

Een zombieproces in Linux verwijst naar die reeds dode processen, maar op de een of andere manier nog steeds aanwezig zijn in de procestabel van het systeem. De maas in de wet is dat dit proces om de een of andere reden niet is opgeschoond door de ouder uit de procestabel. Meestal gebeurt dit na het voltooien van het uitvoeringsproces.

De gebruikelijke manier van werken in Linux is dat nadat een proces de uitvoering ervan heeft voltooid, het zijn ouder op de hoogte stelt, die verantwoordelijk is voor het verwijderen van het proces uit de tabel. Helaas kan de ouder het proces niet uit het geheugen verwijderen in gevallen waarin de ouder de status van het kind niet kan lezen. Zo komt het dat we dode processen in de procestabel hebben. Dit zijn wat we de zombieprocessen noemen.

Wat veroorzaakt Linux Zombie-processen??

Wanneer het onderliggende proces is gemaakt, kan een slecht geschreven bovenliggend proces de functie wait() mogelijk niet aanroepen. Als gevolg hiervan zullen de zombiekinderen in het geheugen blijven hangen totdat ze zijn uitgedoofd.

Dit betekent dat niets het babyproces controleert op statusveranderingen en dat het SIGCHLD-signaal wordt genegeerd. Misschien verstoort een andere toepassing de uitvoering van het bovenliggende proces, hetzij door slechte programmering of door kwaadwillende bedoelingen.

De juiste systeemhuishouding zal niet plaatsvinden als het bovenliggende proces niet let op statusveranderingen in het onderliggende proces.

Wanneer het babyproces is voltooid, worden de PCB en de vermelding in de procestabel niet verwijderd. Hierdoor wordt de zombiestatus nooit van de print verwijderd.

Zombies hebben wel wat geheugen, maar dat is meestal geen probleem. Omdat Linux-systemen een eindig aantal PID's hebben (zij het een groot aantal), kan er geen ander proces starten als er genoeg PID's zijn gezombed. Het is twijfelachtig of dit zal gebeuren.

Zombie-processen suggereren echter dat er iets mis is gegaan met een applicatie en dat een specifiek programma een bug kan hebben.
Softwarefouten in datacenters mogen niet worden getolereerd en moeten worden aangepakt.
Je moet zombieprocessen in de gaten houden en vernietigen totdat de fout is verholpen.

De proces-ID kan pas opnieuw worden gebruikt als deze is gestart, dus de invoer van de procestabel is klein.
Omdat de PCB veel groter is dan de invoer in de procestabel in een 64-bits besturingssysteem, zal dit waarschijnlijk geen problemen veroorzaken.

De hoeveelheid geheugen die beschikbaar is voor andere processen kan worden beïnvloed door een groot aantal zombies. Als je echter zoveel zombies hebt, heb je een ernstig probleem met de bovenliggende applicatie of een bug in het besturingssysteem.

Dus, wat doe je als een procedure in een zombie verandert?? Je spoort de zombieprocessen op en elimineert ze.

Hoe een zombieproces te vinden?

De eerste stop bij het doden van een zombieproces in het systeem is om het eerst te identificeren. Omdat het init-proces de zombies regelmatig opruimt, hoef je alleen maar het proces te vernietigen dat ze heeft gemaakt.

Het bovenste commando is een snelle manier om te zien of er zombies in uw omgeving zijn. Om dit te bereiken, zullen we het volgende commando uitvoeren:.

top

top commando resultaten

Het aantal zombieprocessen in dit systeem wordt weergegeven op de uitvoer. In ons bovenstaande geval hebben we 0 zombies.
Door het ps-commando te gebruiken en het in egrep te pipen, kunnen we er een lijst van krijgen. De staatsvlag voor zombieprocessen is "Z", en soms zie je ook "overleden".

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

De staatsvlag voor zombieprocessen is Z of opgeheven

Laten we de verschillende secties van deze opdracht opsplitsen.

Z in de STAT-kolom van de uitvoer identificeert een zombieproces.
[opgeheven] in de laatste (COMMAND) kolom van de uitvoer identificeert ook een zombieproces.

Idealiter is het niet mogelijk om een ​​zombieproces te doden omdat het dood is. In plaats daarvan stellen we de ouder op de hoogte om te proberen de processtatus van het kind te lezen en ze uiteindelijk van de systeemtabel te verwijderen. Om dit proces te activeren, sturen we een SIGCHLD-signaal naar de ouder van het proces. Het identificeren van de bovenliggende proces-ID of wat PID wordt genoemd, omvat het uitvoeren van de volgende opdracht:

tuts@fosslinux:~$ ps -o ppid= 

Identificatie van de bovenliggende proces-ID

Nadat je de Zombie's PID hebt gekregen, gebruik je het commando SIGCHLD-signaal naar de eerder geïdentificeerde bovenliggende processen.

tuts@fosslinux:~$ kill -s SIGCHLD 

gebruik het commando SIGCHLD signaal

In sommige gevallen wordt hiermee het Zombie-proces niet opgeruimd. Dit roept ons op om deel te nemen aan plan b of c. De voorgaande houdt in dat het bovenliggende proces opnieuw moet worden gestart of dat de bovenliggende processen moeten worden afgebroken. Aan de andere kant, in de laatste gevallen moet het systeem opnieuw worden opgestart, vooral wanneer het Zombie-proces een storing of een enorme piek zou kunnen veroorzaken vanwege het Zombie-proces.

Hieronder vindt u de opdracht om het bovenliggende proces te beëindigen.

tuts@fosslinux:~$ kill -9 

commando om het bovenliggende proces te beëindigen

In het geval dat een bovenliggend proces wordt afgebroken, worden bij uitbreiding ook alle onderliggende processen van het gegeven bovenliggende proces gedood. Als een van de onderliggende processen op het gegeven moment kritiek is, moet u het doden mogelijk uitstellen totdat het veilig is. Aan de andere kant kan een snelle dubbele controle u vertellen hoeveel geheugen of verwerkingskracht de Zombie-processen verbruiken. Dit helpt bepalen of de betere optie is om de bovenliggende processor te doden om het systeem opnieuw op te starten in de volgende cyclus van het systeemonderhoud dat al is gepland.

Hoe werken processtatussen op Linux??

Natuurlijk moet Linux alle applicaties en daemons bijhouden die op je computer draaien. Het onderhouden van de procestabel is een van de manieren waarop dit wordt bereikt.
Dit is een lijst met kernelgeheugenstructuren. Deze lijst bevat een vermelding voor elk proces dat enige informatie erover bevat. Elk van de procestabelstructuren bevat heel weinig informatie.

Ze slaan de proces-ID op, een paar andere stukjes informatie en een verwijzing naar het procesbesturingsblok (PCB).

De PCB is waar Linux alle informatie opslaat die het nodig heeft om voor elk proces op te zoeken of in te stellen. Terwijl een proces wordt gemaakt, wordt het gewijzigd, krijgt het een bepaalde verwerkingstijd en wordt het vervolgens vernietigd.

Er zijn meer dan 95 velden op de Linux-PCB. Het is gedefinieerd in de taakstructuur, die meer dan 700 regels lang is. De volgende soorten informatie zijn te vinden op de printplaat:

De statussen van het proces worden hieronder geïllustreerd:

Elk van de volgende kan de "Processtatus" zijn:

Conclusie

Tenzij ze deel uitmaken van een enorme horde, zijn zombies niet zo schadelijk. Een paar zijn geen probleem, en een snelle herstart zal ze wissen. Er is echter één punt om te overwegen:.

Linux-architecturen hebben een maximum aantal processen en, als resultaat, een maximum aantal proces-ID-nummers. Wanneer het maximale aantal zombieprocessen van een computer is bereikt, kunnen nieuwe processen niet worden gestart.

Zombieprocessen zijn geen processen; het zijn de overblijfselen van dode processen die hun bovenliggende proces niet correct heeft opgeschoond. Als je echter merkt dat een bepaalde applicatie of proces constant zombies voortbrengt, moet je dit verder onderzoeken.

Hoogstwaarschijnlijk is het gewoon een slecht geschreven programma; in dat geval is er misschien een bijgewerkte versie die opschont nadat de onderliggende correct is verwerkt.

Top 10 spellen om te spelen op Ubuntu
Het Windows-platform is een van de dominante platforms voor gaming geweest vanwege het enorme percentage games dat tegenwoordig wordt ontwikkeld om Wi...
5 beste arcade-spellen voor Linux
Tegenwoordig zijn computers serieuze machines die worden gebruikt om te gamen. Als je de nieuwe hoge score niet kunt halen, weet je wat ik bedoel. In ...
Strijd om Wesnoth 1.13.6 Ontwikkeling vrijgegeven
Strijd om Wesnoth 1.13.6 die vorige maand werd uitgebracht, is de zesde ontwikkelingsrelease in de 1.13.x-serie en het levert een aantal verbeteringen...