Lær Linux

Hvordan drepe Zombie-prosesser i Linux

Hvordan drepe Zombie-prosesser i Linux

En zombieprosess i Linux refererer til de allerede døde prosessene, men på en eller annen måte er de fremdeles til stede i systemets prosesstabell. Smutthullet er at denne prosessen av en eller annen grunn ikke ble renset av foreldrene fra prosessbordet. Vanligvis skjer dette etter fullført prosess.

Den vanlige måten å bruke Linux på er at etter at en prosess er fullført, varsler den sin overordnede, som er ansvarlig for å fjerne prosessen fra tabellen. Dessverre klarer ikke foreldrene å fjerne prosessen fra minnet i tilfeller der foreldrene ikke kan lese barnets status. Slik kommer det til å være at vi har døde prosesser i prosesstabellen. Dette er det vi kaller zombieprosessene.

Hva forårsaker Linux Zombie prosesser?

Når barneprosessen blir opprettet, kan det hende at en dårlig skrevet foreldreprosess ikke klarer å ringe ventetiden (). Som et resultat vil zombiebarnene dvele i minnet til de slukkes.

Dette betyr at ingenting overvåker spedbarnsprosessen for tilstandsendringer, og SIGCHLD-signalet vil bli ignorert. Kanskje forstyrrer et annet program foreldreprosessens utførelse, enten gjennom elendig programmering eller ondsinnet hensikt.

Riktig rengjøring av systemet vil ikke skje hvis foreldreprosessen ikke ser etter tilstandsendringer i barneprosessen.

Når spedbarnsprosessen er ferdig, blir ikke PCB og oppføringen i prosesstabellen fjernet. Zombiestaten blir aldri fjernet fra PCB som et resultat av dette.

Zombier har noe minne, men det er vanligvis ikke et problem. Fordi Linux-systemer har et endelig antall PID-er (om enn et stort antall), hvis nok PID-er blir zombie, kan ingen andre prosesser starte. Det er tvilsomt at dette vil skje.

Imidlertid antyder zombierte prosesser at noe har gått galt med et program, og at et bestemt program kan ha en feil.
Programvarefeil i datasentre skal ikke tolereres og må adresseres.
Du bør holde øye med og ødelegge zombieprosesser til feilen er løst.

Prosess-ID kan ikke gjenbrukes før den er lansert, så prosessbordets oppføring er liten.
Fordi PCB er mye større enn prosesstabelloppføringen i et 64-biters operativsystem, vil dette neppe forårsake noen problemer.

Mengden minne tilgjengelig for andre prosesser kan bli påvirket av et stort antall zombier. Men hvis du har så mange zombier, har du et alvorlig problem med foreldreapplikasjonen eller en feil i operativsystemet.

Så hva gjør du når en prosedyre blir til en zombie? Du sporer opp og eliminerer zombieprosessene.

Hvordan finne en zombieprosess?

Det første stoppet for å drepe en zombieprosess i systemet er først å identifisere den. Fordi init-prosessen rydder opp etter zombier regelmessig, er alt du trenger å gjøre for å bli kvitt dem å ødelegge prosessen som skapte dem.

Toppkommandoen er en rask måte å se om det er noen zombier i ditt område. For å oppnå dette vil vi utføre følgende kommando.

topp

toppkommandoresultater

Antall zombieprosesser i dette systemet vil vises på utdataene. I vårt tilfelle ovenfor har vi 0 zombier.
Ved hjelp av ps-kommandoen og rør den inn i egrep, kan vi få en liste over dem. Statens flagg for zombieprosesser er "Z", og du vil noen ganger også se "nedlagt".

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

Statens flagg for zombieprosesser er Z eller nedlagt

La oss bryte ned de forskjellige delene av denne kommandoen.

Z i STAT-kolonnen i utdataene identifiserer en zombieprosess.
[defunct] i den siste (COMMAND) kolonnen i utgangen identifiserer også en zombieprosess.

Ideelt sett er det ikke mulig å drepe en Zombie-prosess fordi den er død. I stedet gir vi foreldrene beskjed om å prøve og lese barnets prosessstatus og til slutt rense dem fra systemets bord. For å utløse denne prosessen sender vi et SIGCHLD-signal til prosessens foreldre. Å identifisere foreldreprosess-ID eller det som kalles PID innebærer å kjøre følgende kommando:

tuts @ fosslinux: ~ $ ps -o ppid = 

Identifisere foreldreprosess-ID

Etter å ha fått Zombie's PID, bruk kommandoen SIGCHLD signal til de tidligere identifiserte foreldreprosessene.

tuts @ fosslinux: ~ $ kill -s SIGCHLD 

bruk kommandoen SIGCHLD signal

I noen tilfeller fjerner dette ikke Zombie-prosessen. Dette kaller oss til å delta i plan b eller c. Det tidligere innebærer å starte foreldreprosessen på nytt eller drepe foreldreprosessene. På den annen side innebærer sistnevnte tilfeller å starte en systemstart på nytt, spesielt når Zombie-prosessen kan forårsake strømbrudd eller en massiv bølge på grunn av Zombie-prosessen.

Nedenfor er kommandoen for å drepe foreldreprosessen.

tuts @ fosslinux: ~ $ kill -9 

kommando om å drepe foreldreprosessen

I tilfelle en foreldreprosess blir drept, blir alle barneprosessene til den gitte forelderen også drept. Hvis en av barneprosessene er kritisk til det gitte tidspunktet, kan det hende du må utsette drapet til det er trygt. På den annen side kan en rask dobbeltsjekk fortelle deg hvor mye minne eller prosessorkraft Zombie-prosessene bruker. Dette er med på å avgjøre om det bedre alternativet er å drepe foreldreprosessoren for å starte systemet på nytt i den følgende syklusen av systemvedlikeholdet som allerede er planlagt.

Hvordan fungerer prosesstilstander på Linux på Linux?

Selvfølgelig må Linux holde oversikt over alle applikasjonene og demonene som kjører på datamaskinen din. Vedlikehold av prosessbordet er en av måtene det oppnår dette.
Dette er en liste over kjerneminnestrukturer. Denne listen inneholder en oppføring for hver prosess som inneholder litt informasjon om den. Hver av prosessbordstrukturene inneholder svært lite informasjon.

De lagrer prosess-ID, noen få andre informasjonsbiter og en peker til prosesskontrollblokken (PCB).

PCB er der Linux lagrer all informasjonen den trenger for å slå opp eller sette for hver prosess. Når en prosess opprettes, blir den modifisert, gitt behandlingstid og deretter ødelagt.

Det er over 95 felt på Linux PCB. Det er definert i oppgavestrukturen, som er over 700 linjer lang. Følgende informasjon finner du på PCB:

Prosesstilstandene er illustrert nedenfor

Alt av følgende kan være "prosesstilstand":

Konklusjon

Med mindre de er en del av en enorm horde, er ikke Zombies så skadelige. Noen få er ikke så farlig, og en rask omstart vil fjerne dem. Imidlertid er det ett poeng å vurdere.

Linux-arkitekturer har maksimalt antall prosesser og som et resultat maksimalt antall prosess-ID-nummer. Når datamaskinens maksimale antall zombieprosesser oppnås, kan ikke nye prosesser startes.

Zombie-prosesser er ikke prosesser; de er restene av døde prosesser som deres foreldreprosess ikke har ryddet opp riktig. Men hvis du merker at en bestemt applikasjon eller prosess konstant gyter zombier, bør du undersøke nærmere.

Mest sannsynlig er det bare et dårlig skrevet program; i så fall er det kanskje en oppdatert versjon som rydder opp etter at barnet har behandlet riktig.

HD Remastered Games for Linux som aldri hadde en Linux-utgave tidligere
Mange spillutviklere og utgivere kommer med HD-remaster av gamle spill for å forlenge franchisetiden, vennligst fans som ber om kompatibilitet med mod...
Hvordan bruke AutoKey til å automatisere Linux-spill
AutoKey er et desktopautomatiseringsverktøy for Linux og X11, programmert i Python 3, GTK og Qt. Ved å bruke skript og MACRO-funksjonalitet kan du aut...
Hvordan vise FPS-teller i Linux-spill
Linux-spill fikk et stort press da Valve kunngjorde Linux-støtte for Steam-klient og spillene deres i 2012. Siden den gang har mange AAA- og indiespil...