Hvordan Kill Zombie Prosesser på Linux

Nov 25, 2024
Linux
Fatmawati Achmad Zaenuri / Shutterstock

Programmer som er dårlig skrevet eller utfører dårlig kan forlate zombie prosesser lurking inni Linux-maskin. Finn ut hvordan zombier skapes, og hvordan kan du endelig legge dem til hvile.

Hvordan Behandle States Arbeidet med Linux

Linux, selvfølgelig, har å holde styr på alle programmene og demoner som kjører på datamaskinen. En av måtene det gjør dette ved å opprettholde prosessen bordet. Dette er en liste over strukturer i kjerneminne. Hver prosess har en oppføring i denne listen som inneholder litt informasjon om det.

Det er ikke mye i hver av prosessen tabellstrukturer. De holder prosess ID , Et par andre dataelementer, og en peker til prosesskontrollblokk (PCB) i denne prosessen.

Det er den PCB som holder mange detaljer Linux trenger å se opp eller satt for hver prosess. PCB er også oppdatert som et prosess er opprettet, gitt behandlingstid, og til slutt ødelegges.

Linux PCB inneholder over 95 felt. Det er definert som en struktur som kalles task_struct.h , Og det er over 700 linjer lang. PCB inneholder følgende typer informasjon:

  • Process State : De tilstander er beskrevet nedenfor.
  • Prosessnummer : Den unike identifikatoren i operativsystemet.
  • Programteller : Når denne prosessen er neste gis tilgang til CPU, vil systemet bruke denne adressen for å finne neste instruksjon av prosessen som skal utføres.
  • registre : Listen over CPU-registre som brukes av denne prosessen. Listen kan inneholde akkumulatorer, indeksregistre, og stable pekere.
  • Åpne File List : Filer assosiert med denne prosessen.
  • CPU Planlegging Informasjon : Brukes til å bestemme hvor ofte og hvor lenge, er CPU behandlingstid tildelt denne prosessen. Prioriteten av prosessen, pekere til planlegging køer og andre planlegging parametere må tas opp i kretskortet.
  • Memory Management Information : Detaljer om minnet denne prosessen bruker, slik som start- og sluttadressene til prosessen minne og pekere til minnesider.
  • I / O statusinformasjon : Enhver inn- eller ut-enheter som brukes ved fremgangsmåten.

Den “Process stat” kan være noe av det følgende:

  • R: En kjører eller kjørbart prosess. Kjører betyr det å motta CPU-sykluser og gjennomføring. En kjørbar prosessen er klar til å kjøre og venter på en CPU sporet.
  • S: En sovende prosessen. Fremgangsmåten venter på en handling for å fullstendig, slik som en inn- eller utgangsoperasjon, eller for en ressurs for å bli tilgjengelig.
  • D: Prosessen er i en avbruddsfri hviletilstand. Den bruker en blokkerende systemkall, og kan ikke fortsette før systemkall er ferdig. I motsetning til “Sleep” tilstand, en prosess i denne tilstanden vil ikke reagere på signaler til systemet samtalen er avsluttet og utførelse har returnert til prosessen.
  • T: Prosessen er avsluttet (stoppet) fordi den har mottatt SIGSTOP signal. Den vil bare svare til Sigkill. eller SIGCONT signaler, som enten dreper prosessen eller instruerer den til å fortsette, henholdsvis. Dette er hva som skjer når du bytter fra forgrunnen ( fg ) til bakgrunn ( bg) oppgaver.
  • Z: En Zombie prosess. Når en prosess er fullført, er det ikke bare forsvinne. Det frigjør noe minne den bruker og fjerner seg fra minnet, men den trer i prosessen bordet og PCB forbli. Sin tilstand er satt til EXIT_ZOMBIE , Og dens overordnede prosessen blir varslet (av Sigchld. signal) som barnet prosessen er ferdig.

I Zombie tilstand, kaller den overordnede prosessen en av vente() familier av funksjoner når barnprosessen er opprettet. Det venter da på en statsendring i barnprosessen. Har barnprosessen blitt stoppet, fortsatte, eller drept av et signal? Har det avsluttet ved å løpe gjennom den naturlige ferdigstillelsen av koden sin?

Hvis statens endring er en som betyr at barnprosessen har sluttet å kjøre, er utgangskoden lest. Deretter ødelegges barnets PCB, og dens oppføring i prosessbordet er fjernet. Ideelt sett skjer dette alt i blikket i et øye, og prosessene i zombie-staten eksisterer ikke veldig lenge.

I SLEKT: Slik kjører og kontrollerer Bakgrunnsprosesser på Linux

Hva forårsaker zombieprosesser på Linux?

En dårlig skriftlig overordnet prosess kan ikke ringe vente() funksjon når barnprosessen er opprettet. Dette betyr at ingenting ser på statlige endringer i barnprosessen, og Sigchld. signalet vil bli ignorert. Eller kanskje et annet program påvirker utførelsen av foreldreprosessen, enten på grunn av dårlig programmering eller ondsinnet hensikt.

Men hvis foreldreprosessen ikke ser på statlige endringer i barnprosessen, vil det ikke forekomme riktig system housekeeping. PCB og oppføring i prosessbordet blir ikke fjernet når barnas prosessen avsluttes. Dette resulterer i at zombie-staten aldri blir fjernet fra PCB.

Zombier bruker litt minne, men de vanligvis ikke utgjør et problem. Oppføringen i prosessbordet er lite, men til det er utgitt, kan prosess-IDen ikke gjenbrukes. På et 64-biters operativsystem, er det lite sannsynlig at det oppstår problemer fordi PCB er mye større enn prosessbordet.

Et stort antall zombier kunne, tenkelig, påvirke mengden minne som er gratis for andre prosesser. Hvis du har det mange zombier, har du imidlertid et alvorlig problem med foreldreapplikasjonen eller en operativsystembugg.

Slik fjerner du zombieprosesser

Du kan ikke drepe en zombieprosess fordi den allerede er død. Det vil ikke svare på noen signaler fordi det er blitt fjernet fra minnet - det er ingen steder å sende en Sigkill. signal. Du kan prøve å sende Sigchld. Signal til foreldreprosessen, men hvis det ikke fungerte da barnas prosessen avsluttet, er det ikke sannsynlig å jobbe nå, heller.

Den eneste pålitelige løsningen er å drepe foreldreprosessen. Når det er avsluttet, er barnprosessene arvet av i det prosess, som er den første prosessen som skal kjøres i et Linux-system (dens prosess-ID er 1).

De i det Prosessen utfører regelmessig den nødvendige oppryddingen av zombier, for å drepe dem, du må bare drepe prosessen som skapte dem. De topp Kommandoen er en praktisk måte å se om du har noen zombier.

Skriv inn følgende:

  Topp  

Dette systemet har åtte zombieprosesser. Vi kan liste disse Ved å bruke den PS. kommando og piping det inn i Egrep . Igjen, zombie prosesser har et statlig flagg av "z", og du vil vanligvis også se "defunct."

Skriv inn følgende:

 PS AUX | Egrep "Z | Defunct" 

Zombieprosessene er oppført.

Dette er en finere måte å oppdage prosess-IDene til zombier enn å bla frem og tilbake gjennom topp . Vi ser også at et program som heter "Badprg" skapte disse zombiene.

Prosess-IDen til den første zombie er 7641, men vi må finne prosess-IDen til sin overordnede prosess. Vi kan gjøre det ved å bruke PS. en gang til. Vi bruker Output-alternativet ( -o ) å fortelle PS. For å vise kun foreldres prosess-ID, og ​​deretter passere den med ppid =. flagg.

Prosessen vi vil finne vil bli indikert ved å bruke -P. (prosess) alternativ, og deretter passerer i zombieens prosess-ID.

Derfor skriver vi følgende kommando for å slå opp prosessinformasjonen for prosess 7641, men det vil bare rapportere IDen til foreldreprosessen:

 PS -O ppid = -P 7641 

Vi blir fortalt at foreldreprosessen ID er 7636. Vi kan nå krysse referanse dette ved å bruke PS. en gang til.

Vi ser dette samsvarer med navnet på foreldreprosessen fra tidligere. For å drepe foreldreprosessen, bruk Sigkill-alternativet med Kill-kommandoen som følger:

 Drep -Sigkill 7636 

Avhengig av eier av foreldreprosessen, må du kanskje også bruke sudo. .

Zombier er ikke skummelt ...

... med mindre de er i en massiv horde. Noen er ikke noe å bekymre seg for, og en enkel omstart vil tørke dem ut.

Men hvis du merker at en applikasjon eller prosess alltid er gyte zombier, det er noe du bør se på. Det er mest sannsynlig bare et sloppaktig skriftlig program, i så fall, kanskje det er en oppdatert versjon som renser seg riktig etter barnas prosesser.


Linux - Mest populære artikler

Hvordan Låse Mac Bruke Terminal

Linux Feb 16, 2025

En av de første reglene i cybersikkerhet er å alltid låse datamaskinen før du går bort fra den. Selv om det kanskje ikke er den raskeste måten, kan du låse Apple Mac ved hjelp av ..


Hvordan bruke “Her dokumenter” i Bash på Linux

Linux Mar 31, 2025

Fatmawati Achmad Zaenuri / Shutterstock De merkelig navngitte “her dokumenter” la deg bruke input / ut omdirigering inne Bash skript på Linux. De er en fi..


Hvordan bruke krypterte passord i Bash Scripts

Linux Jun 30, 2025

fatmawati achmad zaenuri / shutterstock.com Hvis du er tvunget til å bruke et Linux-skript for å koble til en passordbeskyttet ressurs, føler du deg sannsyn..


Docker for nybegynnere: Alt du trenger å vite

Linux Jun 15, 2025

Docker skaper pakket programmer kalt containere. Hver beholder tilveiebringer et isolert miljø som ligner en virtuell maskin (VM). I motsetning til VMS Dock..


Hva er nytt i Linux Mint 20,2 “Uma”

Linux Jul 8, 2025

Linux mynte, en av de mer Populære Linux-distribusjoner , har gitt ut versjon 20.2, kallenavnet "Uma". Den leveres med nye funksjoner, oppgraderte internals og andre endringe..


5 Ubuntu Linux -funksjoner du bør bruke

Linux Dec 6, 2024

Ubuntu Linux er Feature Rich og kommer med et kuratert utvalg av forhåndsinstallert programvare. Grav bare litt dypere, så finner du noen funksjoner du burde bruke. Ubuntu -opplevel..


7 feil nye Linux -brukere gjør (og hvordan du kan unngå dem)

Linux Nov 11, 2024

Å lære Linux kan være en frustrerende opplevelse der alt det lille føles som en kamp. Å unngå disse vanlige feilene vil gjøre introduksjonen og adopsjonen av Linux mye enklere og mindre ..


Hvordan få den offentlige IP -en i et Linux Bash -skript

Linux Nov 9, 2024

Du trenger din eksterne IP -adresse hvis du vil koble til datamaskinen din eksternt. Det er enkelt å finne det manuelt, men det er hvordan du finner det fra et Linux -skript. Interne og ..


Kategorier