Sådan dræber man zombieprocesser på Linux

Nov 25, 2025
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 installeres Signal Desktop på Linux

Linux Jan 22, 2026

Eliseu Geisler / Shutterstock.com Signal er Privacy-fokuserede smartphone messaging app alle synes at bruge . Du kan også bruge signal p..


Sådan gemmer du alle desktop ikoner på Mac

Linux Jun 23, 2025

Krisda / Shutterstock. Er din Mac-skrivebord et rod? Vil du ikke virkelig organisere alt? Bare rolig, du kan bruge en terminal kommando til hurtigt at skjule a..


Sådan bruges FSCK-kommandoen på Linux

Linux Aug 18, 2025

Pixza Studio / Shutterstock Alle vores vigtige data sidder i et filsystem af en type eller en anden, og filsystemproblemer er bundet til at ske. På Linux kan ..


Native spil på Linux kan være døende, og det er okay

Linux Sep 27, 2025

DC Studio / Shutterstock.com Det Dampdæk , annonceret i august 2021, har Linux Gaming Circles, der taler om fremtiden for Gaming på Linux. Dækket..


KDE Connect er endelig Kommer til iPhone

Linux Oct 26, 2025

Kde. Hvis du leder efter en nem måde at gøre din iPhone, skal du spille godt med din Kde desktop. , i dag er din heldige dag, som KDE Connect er endeli..


Denne nye Linux Gaming laptop har specifikationerne til at køre noget

Linux Oct 20, 2025

Juno Computers. Linux og Gaming begynder at komme sammen meget mere i det seneste. Det Dampdæk er på vej med Linux installeret, og Juno meddelte netop en n..


Hvad er nyt i Ubuntu 21.10 ’Impish Indri’

Linux Oct 14, 2025

Canonical. Ubuntu 21.10 "Impish Indri" var Udgivet den 14. oktober 2021. Det har funktioner GNOME 40. , en ny kerne- og opdaterede applikat..


Sådan integreres applikationer og scripts til et Linux -skrivebord

Linux Oct 10, 2025

På Linux integreres en applikation uden en desktop -fil ikke med dit desktopmiljø. De fleste applikationer giver en, men lejlighedsvis skal du oprette en. Det er ret let, bare følg disse tri..


Kategorier