Lær Linux

Sådan dræbes Zombie-processer i Linux

Sådan dræbes Zombie-processer i Linux

En zombieproces i Linux henviser til de allerede døde processer, men er på den ene eller anden måde stadig til stede i systemets procestabel. Smuthullet er, at denne proces af en eller anden grund ikke blev renset af forælderen fra procesbordet. Normalt sker dette efter afslutningen af ​​udførelsesprocessen.

Den sædvanlige måde at arbejde på i Linux er, at når en proces er færdig med dens udførelse, underretter den sin overordnede, som er ansvarlig for at fjerne processen fra bordet. Desværre kan forældrene ikke fjerne processen fra hukommelsen i tilfælde, hvor forældrene ikke kan læse barnets status. Sådan kommer det til at være, at vi har døde processer i procestabellen. Det er det, vi kalder zombieprocesserne.

Hvad forårsager Linux Zombie-processer?

Når barneprocessen oprettes, kan en dårligt skrevet overordnet proces muligvis ikke kalde ventetiden () -funktionen. Som et resultat vil dens zombiebørn blive hængende i hukommelsen, indtil de er slukket.

Dette betyder, at intet overvåger spædbarnsprocessen for tilstandsændringer, og SIGCHLD-signalet vil blive ignoreret. Måske forstyrrer en anden applikation forælderprocessens udførelse, enten gennem elendig programmering eller ondsindet hensigt.

Den korrekte systemhushjælp finder ikke sted, hvis den overordnede proces ikke holder øje med tilstandsændringer i barneprocessen.

Når spædbarnsprocessen er færdig, fjernes ikke printkortet og indtastningen i procestabellen. Zombietilstanden fjernes aldrig fra printkortet som et resultat af dette.

Zombier har noget hukommelse, men det er normalt ikke et problem. Da Linux-systemer har et begrænset antal PID'er (omend et stort antal), kan der ikke startes nogen anden proces, hvis der er zombier nok PID'er. Det er tvivlsomt, om dette vil ske.

Imidlertid antyder zombierede processer, at noget er gået galt med en applikation, og at et bestemt program muligvis har en fejl.
Softwarefejl i datacentre bør ikke tolereres og skal adresseres.
Du skal holde øje med og ødelægge zombieprocesser, indtil fejlen er løst.

Proces-id'et kan ikke genbruges, før det startes, så procesbordets indtastning er lille.
Da printkortet er meget større end procesbordindgangen i et 64-bit operativsystem, er det usandsynligt, at det vil give problemer.

Mængden af ​​hukommelse, der er tilgængelig til andre processer, kan blive påvirket af et stort antal zombier. Men hvis du har så mange zombier, har du et alvorligt problem med den overordnede applikation eller en fejl i operativsystemet.

Så hvad laver du, når en procedure bliver til en zombie? Du sporer og eliminerer zombieprocesserne.

Sådan finder du en zombieproces?

Det første stop for at dræbe en zombieproces i systemet er først at identificere den. Fordi init-processen rydder op efter zombier regelmæssigt, er alt hvad du skal gøre for at slippe af med dem at ødelægge den proces, der skabte dem.

Den øverste kommando er en hurtig måde at se, om der er zombier i dit område. For at opnå dette udfører vi følgende kommando.

top

øverste kommandoresultater

Antallet af zombieprocesser i dette system vises på output. I vores tilfælde ovenfor har vi 0 zombier.
Ved hjælp af ps-kommandoen og rør den ind i egrep kan vi få en liste over dem. Statens flag for zombieprocesser er "Z", og du vil undertiden også se "afviklet".

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

Statens flag for zombieprocesser er Z eller afviklet

Lad os nedbryde de forskellige sektioner i denne kommando.

Z i STAT-kolonnen i output identificerer en zombieproces.
[defunct] i den sidste kolonne (COMMAND) i output identificerer også en zombieproces.

Ideelt set er det ikke muligt at dræbe en Zombie-proces, fordi den er død. I stedet underretter vi forældrene om at forsøge at læse barnets processtatus og til sidst rense dem fra systemets tabel. For at udløse denne proces sender vi et SIGCHLD-signal til procesens forælder. Identifikation af det overordnede proces-id eller hvad der kaldes PID indebærer at køre følgende kommando:

tuts @ fosslinux: ~ $ ps -o ppid = 

Identifikation af det overordnede proces-id

Når du har fået Zombie's PID, skal du bruge kommandoen SIGCHLD-signal til de tidligere identificerede overordnede processer.

tuts @ fosslinux: ~ $ kill -s SIGCHLD 

brug kommandoen SIGCHLD signal

I nogle tilfælde rydder dette ikke Zombie-processen. Dette opfordrer os til at engagere os i plan b eller c. Det foregående indebærer at genstarte den overordnede proces eller dræbe den overordnede proces. På den anden side involverer sidstnævnte tilfælde at foretage en genstart af systemet, især når Zombie-processen kan forårsage en strømafbrydelse eller en massiv bølge på grund af Zombie-processen.

Nedenfor er kommandoen til at dræbe den overordnede proces.

tuts @ fosslinux: ~ $ kill -9 

kommando til at dræbe den overordnede proces

Hvis en forældreproces dræbes, dræbes også alle barneprocesserne for den givne forælder. Hvis en af ​​barnets processer er kritisk på det givne tidspunkt, skal du muligvis udsætte drabet, indtil det er sikkert. På den anden side kan en hurtig dobbeltkontrol fortælle dig, hvor meget hukommelse eller processorkraft Zombie-processerne bruger. Dette hjælper med at bestemme, om den bedre mulighed er at dræbe den overordnede processor til at genstarte systemet i den følgende cyklus af systemvedligeholdelsen, der allerede er planlagt.

Hvordan fungerer processer i Linux på Linux?

Selvfølgelig skal Linux holde styr på alle de applikationer og dæmoner, der kører på din computer. Vedligeholdelse af procesbordet er en af ​​måderne det opnår på dette.
Dette er en liste over kernelagerstrukturer. Denne liste indeholder en post for hver proces, der indeholder nogle oplysninger om den. Hver af procestabellens strukturer indeholder meget lidt information.

De gemmer proces-id'et, et par andre stykker information og en markør til proceskontrolblokken (PCB).

PCB er, hvor Linux gemmer alle de oplysninger, den har brug for for at slå op eller indstille for hver proces. Når en proces oprettes, modificeres den, får behandlingstid og derefter ødelægges.

Der er over 95 felter på Linux PCB. Det er defineret i opgavestrukturen, som er over 700 linjer lang. Følgende informationer findes på printkortet:

Processens tilstande er illustreret nedenfor

Et af følgende kan være "Process State":

Konklusion

Medmindre de er en del af en stor horde, er zombier ikke så skadelige. Et par er ikke en big deal, og en hurtig genstart vil rydde dem ud. Der er dog et punkt at overveje.

Linux-arkitekturer har et maksimalt antal processer og som et resultat et maksimalt antal proces-ID-numre. Når en computers maksimale antal zombieprocesser opnås, kan nye processer ikke startes.

Zombie-processer er ikke processer; de er resterne af døde processer, som deres forældreproces ikke har ryddet korrekt op. Men hvis du bemærker, at en bestemt applikation eller proces konstant gyder zombier, bør du undersøge nærmere.

Mest sandsynligt er det bare et dårligt skrevet program; i så fald er der måske en opdateret version, der rydder op, efter at barnet behandler ordentligt.

Sådan udvikler du et spil på Linux
For et årti siden ville ikke mange Linux-brugere forudsige, at deres foretrukne operativsystem en dag ville være en populær spilplatform til kommercie...
Open Source-porte med kommercielle spilmotorer
Gratis, open source og cross-platform spilmotorgendringer kan bruges til at spille gamle såvel som nogle af de temmelig nylige spiltitler. Denne artik...
Bedste kommandoliniespil til Linux
Kommandolinjen er ikke kun din største allierede, når du bruger Linux, den kan også være kilde til underholdning, fordi du kan bruge den til at spille...