Hvordan finne og drepe en zombieprosess på Linux

Hvordan finne og drepe en zombieprosess på Linux
En zombie er en skapning som var et menneske og døde, men på en eller annen måte på grunn av et virus eller noen grunn den våknet igjen. Den er allerede død, men går og beveger seg. Dette er konseptet med en zombie beskrevet i filmer og romaner. På samme måte i Linux er en zombieprosess en prosess som ble fjernet fra systemet som "nedlagt", men som fortsatt på en eller annen måte kjører i systemminnet, kalles zombieprosess. Inntil en barneprosess er eliminert fra en prosessbord, blir den til en zombie først.

En prosess i den avsluttet tilstand er et annet navn for den. Det rengjøres fra minnet ved hjelp av foreldreprosessen. Når foreldreprosessen ikke blir varslet om endringen, blir barneprosessen zombieprosessen, og den får ikke noe oppsigelsessignal, slik at den kan forlate minnet. I Linux, når en prosess fjernes fra minnet, blir foreldreprosessen informert om fjerning. Denne prosessen holder seg i minnet til den varsler foreldreprosessen.

Dette betyr at den døde prosessen ikke fjernes fra minnet umiddelbart, og det fortsetter i systemminnet og blir en zombieprosess. For å fjerne en zombieprosess, kaller foreldreprosessen vent () -funksjonen. Når ventetiden () -funksjonen er kalt inn i spill, fjernes zombieprosessen helt fra systemet.

Drepe en zombieprosess

Før vi flytter for å drepe zombieprosessen, vil vi først diskutere zombieprosessrisikoen og årsakene til zombieprosessen som finner sted. Vi vil også lære mer om zombieprosessen for å gjøre det enkelt å forstå drapsprosessen.

Hva er årsaken til zombieprosessen

Det kan være to hovedårsaker til zombieprosessen. Den første er den der overordnede prosessen ikke kan ringe Wait () -funksjonen når barnekreftingsprosessen kjører, noe som fører til å ignorere Sigchld. Dette kan forårsake zombieprosessen. Den andre er den der den andre applikasjonen kan påvirke utførelsen av foreldreprosessen på grunn av dårlig koding eller ondsinnet innhold i den.

Med andre ord, vi kan si at zombieprosessen er forårsaket når foreldreprosessen ignorerer barnprosessstilstanden, eller den kan ikke sjekke tilstanden til barneprosessen, når barneprosessen avsluttes PCB er ikke fjernet.

Utgjør zombieprosessen en risiko

Zombieprosessen utgjør ingen risiko, de bruker bare en del av minnet i systemet. Prosessbordet har liten størrelse, men IDen til tabellen der zombieprosessen er lagret, kan ikke brukes før den frigjøres av zombieprosessen. Men i tilfelle det er mange zombieprosesser som reserverer minneplassen og ingen minneplass igjen for andre prosesser å finne sted, blir det vanskelig for andre prosesser å kjøre.

Finne en zombieprosess

Før du dreper zombieprosessen er det nødvendig å finne dem. For å finne zombieprosessen vil vi kjøre følgende kommando i terminalen:

linux@linux-virtualbox: ~ $ ps aux | Egrep "Z | nedlag"

I kommandoen over står “PS” for prosessstilstanden den brukes til å se tilstanden til prosessen som kjører i systemet sammen med PS -kommandoen. Vi passerte flagg -auxen der “a” indikerer detaljene om alle tilknyttede prosesser i terminalen, “U” indikerer prosessene som er i brukerlisten, og “X” indikerer prosessene som ikke blir utført fra terminalen. I kombinasjon kan vi si at den brukes til å skrive ut alle løpsprosessene som er lagret i minnet.

Det andre alternativet som er bestått “EGREP” er et prosesseringsverktøy som brukes til å hente uttrykkene eller mønstrene på et spesifisert sted. Til slutt passerte vi nøkkelordet “Z | Defunct” som betegner zombieprosessen som skal hentes i minnet. Når vi utfører kommandoen, vil vi få følgende utgang, som viser zombieprosessen i systemet sammen med "PID".

Produksjon:

Bruker PID %CPU %MEM VSZ RSS TTY Stat Start Time Command
Linux 33819 0.0 0.0 18008 724 pkt/0 s+ 20:22 0:00 grep -e -farge = auto z | nedlag

Zombieprosesser er allerede døde prosesser, men overordnet prosess kan ikke lese statusen og kan ikke frigjøres fra minnet. Så den døde prosessen kan ikke drepes. Vi kan bare gjøre for dem for å gjøre det mulig for overordnede prosessen å lese barnestaten slik at den kan utføres og fjernes fra prosessbordet. For dette vil vi kjøre kommandoen nevnt nedenfor.

linux@linux -virtualbox: ~ $ ps -o ppid = -p 33819

I kommandoen ovenfor prøvde vi å få foreldre -ID for zombieprosessen. Etter å ha fått foreldre -IDen, vil vi kjøre følgende kommando for å drepe zombieprosessen ved å sende Sigchld til overordnede prosessen som gjør det mulig for overordnede prosessen å lese barnestaten:

Linux@Linux -VirtualBox: ~ $ Kill -S Sigchld Parent_pid

I kommandoen over overfører vi signalet til overordnet ID for å drepe zombieprosessen til foreldre -IDen som ble gitt til den. Etter at kommandoen ovenfor er utført, vil den ganske enkelt flytte til neste linje uten å skrive ut noen utdata på terminalen i tilfelle ingen foreldre -ID eksisterer. For å se etter prosessen om zombieprosessen blir drept eller ikke, kan du kjøre kommandoen som vi allerede har henrettet for å finne zombieprosessen.

La oss prøve en annen måte å drepe zombieprosessen som gjøres ved å drepe foreldreprosessen i seg selv. Dette er den mer effektive måten å drepe zombieprosessen fordi den vil fjerne hele prosessen fullstendig og ikke vil la zombien oppstå igjen. For det vil vi kjøre kommandoen nedenfor:

linux@linux -virtualbox: ~ $ kill -9 parent_pid

Etter å ha kjørt kommandoen ovenfor, lar vi systemet drepe overordnet prosess.

Konklusjon

Vi har kort diskutert zombieprosessen og også årsakene og prosedyren for å drepe disse prosessene. Før vi dro til drapsprosessen vår, prøvde vi å forklare årsakene til deres sak, og også måtene å identifisere dem ved hjelp av enkle kommandoer.