Naučite se Linuxa

Kako ubiti zombi procese v Linuxu

Kako ubiti zombi procese v Linuxu

Zombi proces v Linuxu se nanaša na tiste že mrtve procese, ki pa so na tak ali drugačen način še vedno prisotni v procesni tabeli sistema. Vrzel je v tem, da starš iz nekega razloga tega procesa ni očistil iz tabele procesov. Običajno se to zgodi po zaključku izvršilnega postopka.

Običajni način delovanja v Linuxu je, da po zaključku procesa obvesti starša, ki je odgovoren za odstranitev procesa iz tabele. Na žalost starš postopka ne more odstraniti iz spomina v primerih, ko starš ne more prebrati otrokovega statusa. Tako se zgodi, da imamo v tabeli procesov mrtve procese. Temu pravimo zombi procesi.

Kaj povzroča Linux Zombie procese?

Ko je podrejeni postopek ustvarjen, lahko slabo napisan nadrejeni postopek ne prikliče funkcije wait (). Posledično se bodo njeni zombi otroci zadrževali v spominu, dokler ne bodo ugasnili.

To pomeni, da nič ne spremlja otrokovega procesa glede sprememb stanja, signal SIGCHLD pa bo prezrt. Morda druga aplikacija moti izvajanje starševskega procesa bodisi s slabim programiranjem bodisi z zlonamernim namenom.

Pravilnega vzdrževanja sistema ne bo, če nadrejeni postopek ne bo opazoval sprememb stanja v podrejenem procesu.

Ko se postopek dojenčka konča, PCB in vnos v tabelo postopkov ne bo odstranjen. Zaradi tega se stanje zombija nikoli ne odstrani s PCB-ja.

Zombiji sicer imajo nekaj spomina, vendar običajno to ni problem. Ker imajo sistemi Linux končno število PID-ov (čeprav veliko število), če je zombiranih dovolj PID-ov, se noben drug postopek ne more začeti. Dvomljivo je, da se bo to zgodilo.

Vendar pa zombirani procesi kažejo, da je z aplikacijo šlo kaj narobe in da ima določen program napako.
Napak programske opreme v podatkovnih centrih ne smemo dopuščati in jih je treba odpraviti.
Pazite in uničujte zombi procese, dokler napake ne odpravite.

ID-ja procesa ni mogoče ponovno uporabiti, dokler se ne zažene, zato je vnos v tabelo procesov majhen.
Ker je PCB veliko večji od vnosa tabele procesov v 64-bitnem operacijskem sistemu, to verjetno ne bo povzročalo težav.

Na količino pomnilnika, ki je na voljo za druge procese, lahko vpliva veliko število zombijev. Če pa imate toliko zombijev, imate resne težave s starševsko aplikacijo ali napako v operacijskem sistemu.

Torej, kaj storite, ko se postopek spremeni v zombija? Izsledite in odpravite zombi procese.

Kako najti postopek zombija?

Začetna zaustavitev procesa ubijanja zombijev v sistemu je, da ga najprej prepoznamo. Ker se postopek init po zombijih redno čisti, je vse, kar morate storiti, da se jih znebite, uničiti postopek, ki jih je ustvaril.

Z zgornjim ukazom lahko hitro ugotovite, ali je na vašem območju zombi. Da bi to dosegli, bomo izvedli naslednji ukaz.

vrh

rezultati zgornjega ukaza

Število zombi procesov v tem sistemu bo prikazano na izhodu. V našem primeru zgoraj imamo 0 zombijev.
Z ukazom ps in njegovo napeljavo v egrep lahko dobimo njihov seznam. Državna zastava za zombi procese je "Z", včasih pa boste videli tudi "neaktiven".

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

Državna zastava za zombi procese je Z ali ne obstaja

Razčlenimo različne odseke tega ukaza.

Z v stolpcu STAT izhoda označuje postopek zombija.
[defunct] v zadnjem (COMMAND) izhodnem stolpcu tudi identificira zombi proces.

Idealno je, da postopka zombi ni mogoče ubiti, ker je mrtev. Namesto tega starša obvestimo, da poskuša in prebere status otrokovega procesa ter ga na koncu očisti iz sistemske tabele. Da bi sprožili ta postopek, staršu procesa pošljemo signal SIGCHLD. Prepoznavanje ID-ja nadrejenega procesa ali tistega, kar se imenuje PID, vključuje zagon naslednjega ukaza:

tuts @ fosslinux: ~ $ ps -o ppid = 

Identifikacija ID nadrejenega procesa

Po pridobitvi PID-ja zombija uporabite signal ukaza SIGCHLD za predhodno identificirane nadrejene procese.

tuts @ fosslinux: ~ $ kill -s SIGCHLD 

uporabite ukaz SIGCHLD signal

V nekaterih primerih to ne razjasni postopka zombi. To nas poziva, da se vključimo v načrt b ali c. Predhodna zahteva ponovni zagon nadrejenega procesa ali ubijanje nadrejenih procesov. Po drugi strani pa slednji primeri vključujejo ponovni zagon sistema, zlasti kadar lahko postopek Zombie povzroči izpad ali velik val zaradi procesa Zombie.

Spodaj je ukaz za ubijanje nadrejenega procesa.

tuts @ fosslinux: ~ $ kill -9 

ukaz za ubijanje nadrejenega procesa

V primeru, da je nadrejeni proces umorjen, se postranijo tudi vsi podrejeni procesi danega starša. Če je kateri od podrejenih procesov v danem trenutku kritičen, boste morda morali odložiti pobijanje, dokler ne bo varno. Po drugi strani pa vam lahko hitra dvojna kontrola pove, koliko pomnilnika ali procesorske moči zasedajo procesi Zombie. To pomaga ugotoviti, ali je boljša možnost ubiti nadrejeni procesor, da vnovič zažene sistem v naslednjem ciklu vzdrževanja sistema, ki je že načrtovan.

Kako v Linuxu delujejo stanja procesov?

Seveda mora Linux spremljati vse programe in demone, ki se izvajajo v vašem računalniku. Vzdrževanje tabele procesov je eden od načinov, kako to doseči.
To je seznam struktur pomnilnika jedra. Ta seznam vključuje vnos za vsak postopek, ki vsebuje nekaj informacij o njem. Vsaka struktura tabel procesov vsebuje zelo malo informacij.

Shranijo ID procesa, nekaj drugih podatkov in kazalec na blok za nadzor procesa (PCB).

Na PCB-ju Linux shranjuje vse informacije, ki jih potrebuje za iskanje ali nastavitev za posamezen postopek. Ko se postopek ustvari, se spremeni, mu da čas obdelave in nato uniči.

Na PCB Linuxu je več kot 95 polj. Določena je v strukturi opravil, ki je dolga več kot 700 vrstic. Na PCB-ju lahko najdete naslednje vrste informacij:

Stanja procesa so ponazorjena spodaj

"Stanje procesa" je lahko kar koli od naslednjega:

Zaključek

Zombiji niso tako škodljivi, razen če so del velike horde. Nekaj ​​jih ni veliko in hiter ponovni zagon jih bo odpravil. Vendar je treba upoštevati eno točko.

Arhitekture Linuxa imajo največje število procesov in posledično največje število ID-jev procesov. Ko je v računalniku doseženo največje število zombi procesov, novih postopkov ni mogoče zagnati.

Zombi procesi niso procesi; so ostanki mrtvih procesov, ki jih njihov nadrejeni proces ni pravilno očistil. Če pa opazite, da določena aplikacija ali postopek nenehno drste zombije, bi morali nadalje raziskati.

Najverjetneje gre le za slabo napisan program; v tem primeru morda obstaja posodobljena različica, ki se očisti po pravilni obdelavi otroka.

Vadnica za bitko za Wesnoth
Bitka za Wesnoth je ena izmed najbolj priljubljenih odprtokodnih strateških iger, ki jih lahko trenutno igrate. Ne samo, da se ta igra razvija že zelo...
0 A.D. Vadnica
Od številnih strateških iger tam 0 A.D. uspe izstopati kot izčrpen naslov in zelo globoka, taktična igra, čeprav je odprtokodna. Razvoj igre deluje ze...
Vadnica za Unity3D
Uvod v Unity 3D Unity 3D je močan motor za razvoj iger. Navzkrižna platforma vam omogoča ustvarjanje iger za mobilne naprave, splet, namizje in konzol...