Sådan dræber man zombieprocesser på Linux

Nov 25, 2024
Linux
FATMAWATI ACHMAD ZAENURI / SHUTTERSTOCK

Programmer, der er dårligt skrevet eller udfører dårligt, kan forlade zombie processer. lurker inde i din Linux computer. Find ud af, hvordan zombier er skabt, og hvordan du endelig kan lægge dem til hvile.

Hvordan processtaterne arbejder på Linux

Linux skal selvfølgelig holde styr på alle applikationer og dæmoner, der kører på din computer. En af de måder, det gør dette på, er ved at opretholde procesbordet. Dette er en liste over strukturer i kernel hukommelse. Hver proces har en post i denne liste, der indeholder nogle oplysninger om det.

Der er ikke en hel del i hver af procesbordsstrukturerne. De holder proces ID. , et par andre dataelementer og en peger til processtyringsblokken (PCB) for denne proces.

Det er PCB, der holder de mange detaljer Linux, der skal kigge op eller sætte for hver proces. PCB'en opdateres også som en proces er skabt, givet behandlingstid og endelig ødelagt.

Linux PCB indeholder over 95 felter. Det er defineret som en struktur kaldet task_struct.h. , og det er over 700 linjer langt. PCB'en indeholder følgende typer oplysninger:

  • Processtatus : Staterne er beskrevet nedenfor.
  • Proces nummer. : Dens unikke identifikator inden for operativsystemet.
  • Program tæller. : Når denne proces er næste givet adgang til CPU'en, vil systemet bruge denne adresse til at finde den næste instruktion af den proces, der skal udføres.
  • Registre. : Listen over CPU-registre, der anvendes ved denne proces. Listen kan indeholde akkumulatorer, indekskregister og stakke pointers.
  • Åbn filliste : Filer i forbindelse med denne proces.
  • CPU planlægning information : Bruges til at bestemme, hvor ofte, og for hvor lang tid er CPU-behandlingstid tildelt denne proces. Prioriteten af ​​processen, pointers til planlægning af køer og andre planlægningsparametre skal registreres i PCB.
  • Memory Management Information : Detaljer om hukommelsen Denne proces bruger, f.eks. Start- og slutadresserne på proceshukommelsen og peger på hukommelsessiderne.
  • I / O-statusoplysninger : Eventuelle in- eller output-enheder, der anvendes af processen.

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

  • : En løbende eller løbelig proces. Running betyder det modtager CPU-cykler og udførelse. En løbelig proces er klar til at køre og vente på en CPU-slot.
  • S: En sovende proces. Processen venter på en handling for at fuldføre, såsom en in- eller output operation, eller for en ressource, der skal foreligges.
  • D: Processen er i en uafbrydelig søvntilstand. Det bruger et blokeringssystemopkald og kan ikke fortsætte, indtil systemopkaldene har gennemført. I modsætning til "søvn" tilstand vil en proces i denne tilstand ikke reagere på signaler, indtil systemopkaldet er afsluttet, og udførelsen er vendt tilbage til processen.
  • T: Processen er afsluttet (stoppet), fordi den modtog SIGSTOP. signal. Det vil kun svare til Sigkill. eller Sigcont. signaler, som enten dræber processen eller instruerer den til at fortsætte henholdsvis. Dette er hvad der sker, når du bytter fra forgrunden ( FG. ) til baggrund ( bg) opgaver.
  • Z: En zombie proces. Når en proces fuldender, forsvinder den ikke bare. Det frigør enhver hukommelse, den bruger og fjerner sig fra hukommelsen, men dets indgang i procesbordet og PCB forbliver. Dens stat er indstillet til Exit_zombie. , og dens moderselskab er anmeldt (af Sigchld. signal), at barnets proces er færdig.

I zombiestaten kalder moderprocessen en af ​​de vente() Funktioner af funktioner når barnet processen er oprettet. Det venter derefter til en tilstandsændring i barnets proces. Har barnet processen blevet stoppet, fortsætter, eller dræbt af et signal? Har det afsluttes ved at køre gennem den naturlige afslutning af sin kode?

Hvis staten ændring er en, der betyder at barnet processen er stoppet, er dens exitkode læse. Derefter barnets PCB ødelagt og den træder i processen tabellen er fjernet. Ideelt set alt dette sker i løbet af et øjeblik, og processer i zombie tilstand eksisterer ikke for meget længe.

RELATEREDE: Sådan Run og Kontrol Baggrund Processer på Linux

Hvad er årsagen Zombie Processer på Linux?

En dårligt skrevet forælder proces kan ikke kalde vente() fungere, når barnet processen er oprettet. Dette betyder intet er at se for statslige ændringer i barnet processen, og den Sigchld. signalet vil blive ignoreret. Eller, er måske et andet program, der påvirker udførelsen af ​​den overordnede proces, enten på grund af dårlig programmering eller ondsindede hensigter.

Men hvis den overordnede proces ikke er at se for statslige ændringer i barnet processen, den rette systemet husholdning vil ikke forekomme. PCB og posten i processen tabellen, vil ikke blive fjernet, når barnet processen afsluttes. Dette resulterer i zombie tilstand aldrig fjernes fra PCB.

Zombier bruger en smule hukommelse, men de normalt ikke udgøre et problem. Punktet i processen tabellen er lille, men, indtil den udgives, kan processen id ikke genbruges. På en 64-bit operativsystem, der er usandsynligt at forårsage nogen problemer, fordi PCB er langt større end tilmeldingsprocessen bordet.

Et stort antal af zombier kunne tænkes, påvirke mængden af ​​hukommelse, der er gratis for andre processer. Hvis du har fået at mange zombier, selv om, du har fået et alvorligt problem med den forælder program eller et operativsystem fejl.

Sådan fjernes Zombie Processer

Du kan ikke dræbe en zombie proces, fordi det er allerede død. Det vil ikke reagere på nogen signaler, fordi det er blevet fjernet fra hukommelsen-der er ingen steder at sende Sigkill. signal. Du kan prøve at sende Sigchld. signal til den overordnede proces, men hvis det ikke virkede, når barnet processen afsluttes, er det usandsynligt at arbejde nu, enten.

Den eneste pålidelige løsning er at dræbe den overordnede proces. Når det er afsluttet, er dens underordnede processer arvet af den i det proces, som er den første proces til at køre på et Linux system (sin proces ID er 1).

Det i det proces udfører jævnligt den nødvendige oprydning af zombier, så for at dræbe dem, du bare nødt til at dræbe den proces, der skabte dem. Det top kommando er en bekvem måde at se, hvis du har nogen zombier.

Skriv følgende:

  top  

Dette system har otte zombie processer. Vi kan liste disse ved hjælp af ps kommando og rørsystemer det ind egrep . Igen, zombie processer har en tilstand flag ”Z”, og du vil som regel også se ”hedengangne”.

Skriv følgende:

 ps aux | egrep "Z | hedengangne" 

De zombie processer er noteret.

Dette er en pænere måde at opdage den proces ID'er af zombier end at rulle frem og tilbage gennem top . Vi ser også, at et program kaldet ”badprg” affødte disse zombier.

Processen ID første zombie er 7641, men vi har brug for at finde den proces id af sin overordnede proces. Vi kan gøre det ved hjælp ps igen. Vi bruger udskriftsoptionen ( -o ) at fortælle ps til kun at vise forældrenes proces-id, og derefter sende det med den ppid = flag.

Den proces, vi ønsker at finde, vil blive indikeret ved hjælp af -p (Proces), og tryk derefter passerer i zombie proces-id.

Derfor skal du skrive vi følgende kommando for at se op informationsprocessen til proces 7641, men det vil kun rapportere ID overordnede proces:

 ps -o ppid = -p 7641 

Vi får at vide den overordnede proces-id er 7636. Vi kan nu krydshenvisning dette ved hjælp af ps. en gang til.

Vi ser dette kampe navnet på moderprocessen fra tidligere. For at dræbe moderprocessen skal du bruge Sigkill-indstillingen med Kill-kommandoen som følger:

 Kill -sigkill 7636 

Afhængigt af ejer af moderprocessen skal du måske også bruge sudo. .

Zombier er ikke skræmmende ...

... medmindre de er i en massiv horde. Et par er ikke noget at bekymre sig om, og en simpel genstart vil tørre dem ud.

Men hvis du bemærker, at en ansøgning eller proces altid gyder zombier, er det noget, du skal se på. Det er højst sandsynligt bare et sløvt skrevet program, i hvilket tilfælde måske er der en opdateret version, der korrekt renser op efter sine barnprocesser.


Linux - Mest populære artikler

Sådan tvinge brugerne til at ændre deres adgangskode på Linux

Linux Nov 4, 2024

Ilya Titchev / Shutterstock Adgangskoder er keystone til konto sikkerhed. Vi viser dig, hvordan du nulstiller adgangskoder, indstil adgangskodeudløbsperioder ..


Sådan låses din Mac ved hjælp af Terminal

Linux Feb 16, 2025

En af de første regler for cybersecurity er at altid låse din computer, før du går væk fra den. Mens det måske ikke er den hurtigste måde, kan du låse din Apple Mac ved hjælp af..


Hvordan vælger du mellem Ubuntu, Kubuntu, Xubuntu og Lubuntu

Linux Mar 19, 2025

tomeqs / shutterstock.com. Der er mere end en ubuntu. Du kan downloade Ubuntu, Kubuntu, Xubuntu eller Lubuntu: Men hvad er forskellen, og som skal du vælge? S..


Sådan bruger du braceudvidelse i Linux's Bash Shell

Linux May 12, 2025

FATMAWATI ACHMAD ZAENURI / SHUTTERSTOCK Brace ekspansion er en nyttig teknik til at generere lister over strenge, der kan bruges i scripts og aliaser og på Li..


Sådan konfigureres eller deaktiverer Linux Mint Update Notifikationer

Linux Jul 9, 2025

Havde nok af Linux Mint's irriterende opdateringsmeddelelser? Eller måske er du så bekymret for at holde dig opdateret, du vil se dem endnu mere? Uanset hvad, justering af meddelelserne ..


Sådan rulles kernen i Linux

Linux Sep 30, 2025

fatmawati achmad zaenuri / shutterstock.com Hvis din Linux PC pludselig har problemer efter en opdatering til dit system, er det muligt en Linux Kernel..


Sådan downloader og installerer Steam på Linux

Linux Oct 9, 2025

Postmodern Studio / Shutterstock.com Så du vil prøve spil på Linux. ? I denne artikel skal du se på, hvordan man installerer damp på enhver Lin..


Sådan får du din offentlige IP i et Linux Bash -script

Linux Nov 9, 2024

Du har brug for din eksterne IP -adresse, hvis du vil eksternt oprette forbindelse til din computer. At finde det manuelt er let, men her er hvordan du finder din det inden for et Linux -script..


Kategorier