Naučite Linux

Kako ubiti zombi procese u Linuxu

Kako ubiti zombi procese u Linuxu

Zombi proces u Linuxu odnosi se na one već mrtve procese, ali su, na ovaj ili onaj način, još uvijek prisutni u tablici procesa sustava. Rupa je u tome što roditelj iz nekog razloga ovaj proces nije očistio iz tablice procesa. Obično se to događa nakon završetka postupka izvršenja.

Uobičajeni način rada u Linuxu je da nakon što postupak dovrši svoje izvršavanje, obavijesti svog roditelja koji je odgovoran za uklanjanje procesa iz tablice. Nažalost, roditelj nije u mogućnosti ukloniti postupak iz memorije u slučajevima kada roditelj ne može pročitati djetetov status. Tako dolazi do toga da u tablici procesa imamo mrtve procese. To su ono što nazivamo zombi procesima.

Što uzrokuje Linux Zombie procese?

Kada se podređeni proces kreira, loše napisan nadređeni postupak možda neće uspjeti pozvati funkciju wait (). Kao rezultat toga, njegova zombi djeca ostat će u sjećanju dok ih ne ugase.

To znači da ništa ne prati djetetov proces zbog promjena stanja, a signal SIGCHLD bit će zanemaren. Možda druga aplikacija ometa izvršavanje roditeljskog procesa bilo lošim programiranjem ili zlonamjernom namjerom.

Ispravno održavanje sustava neće se dogoditi ako roditeljski proces ne prati promjene stanja u djetetovom procesu.

Kada se postupak dojenčeta završi, PCB i unos u tablicu procesa neće se ukloniti. Kao rezultat toga, zombi stanje se nikada ne uklanja s PCB-a.

Zombiji imaju malo memorije, ali to obično nije problem. Budući da Linux sustavi imaju konačan broj PID-ova (iako velik broj), ako se zombira dovoljno PID-ova, nijedan drugi postupak ne može započeti. Sumnja se da će se to dogoditi.

Međutim, zombirani procesi sugeriraju da nešto nije u redu s aplikacijom i da određeni program može imati grešku.
Programske pogreške u podatkovnim centrima ne smiju se tolerirati i moraju se riješiti.
Trebali biste pripaziti i uništavati zombi procese dok se kvar ne otkloni.

ID procesa ne može se ponovno koristiti dok se ne pokrene, tako da je unos u tablicu procesa mali.
Budući da je PCB mnogo veći od unosa tablice procesa u 64-bitnom operativnom sustavu, malo je vjerojatno da će to uzrokovati probleme.

Na količinu memorije dostupne za druge procese mogao bi utjecati velik broj zombija. Međutim, ako imate toliko zombija, imate ozbiljan problem s roditeljskom aplikacijom ili grešku u operativnom sustavu.

Dakle, što učiniti kada se postupak pretvori u zombija? Tražite i uklanjate zombi procese.

Kako pronaći zombi postupak?

Prvo zaustavljanje ubijanja zombi procesa u sustavu je prvo njegovo identificiranje. Budući da se postupak pokretanja redovito čisti nakon zombija, sve što trebate učiniti da biste ih se riješili jest uništiti postupak koji ih je stvorio.

Naredba vrh brzi je način da vidite ima li zombija u vašem području. Da bismo to postigli, izvršit ćemo sljedeću naredbu.

vrh

najviši rezultati naredbe

Broj zombi procesa u ovom sustavu bit će prikazan na izlazu. U našem gore navedenom slučaju imamo 0 zombija.
Pomoću ps naredbe i prebacivanjem u egrep možemo dobiti njihov popis. Državna zastava za zombi procese je "Z", a ponekad ćete vidjeti i "nestalo".

tuts @ fosslinux: ~ $ ps aux | egrep "Z | ugašen"

Državna zastava za zombi procese je Z ili ne postoji

Raščlanimo razne odjeljke ove naredbe.

Z u STAT stupcu izlaza identificira zombi postupak.
[defunct] u posljednjem (COMMAND) stupcu rezultata također identificira zombi proces.

U idealnom slučaju, nije moguće ubiti zombi postupak jer je mrtav. Umjesto toga, obavještavamo roditelja da pokuša i pročita djetetov status procesa i konačno ih očisti sa tablice sustava. Da bismo pokrenuli ovaj proces, roditelju procesa šaljemo signal SIGCHLD. Identificiranje ID-a nadređenog procesa ili onoga što se naziva PID uključuje pokretanje sljedeće naredbe:

tuts @ fosslinux: ~ $ ps -o ppid = 

Identificiranje ID-a nadređenog procesa

Nakon dobivanja PID-a zombija, upotrijebite signal naredbe SIGCHLD za prethodno identificirane roditeljske procese.

tuts @ fosslinux: ~ $ kill -s SIGCHLD 

upotrijebite naredbu SIGCHLD signal

U nekim slučajevima to ne raščisti postupak zombija. To nas poziva da se uključimo u plan b ili c. Prethodno podrazumijeva ponovno pokretanje nadređenog procesa ili ubijanje nadređenih procesa. S druge strane, potonji slučajevi uključuju ponovno pokretanje sustava, posebno kada bi zombi proces mogao uzrokovati prekid rada ili masovni val zbog procesa zombija.

Ispod je naredba za ubijanje nadređenog procesa.

tuts @ fosslinux: ~ $ ubiti -9 

naredba za ubijanje roditeljskog procesa

U slučaju da se roditeljski proces ubije, produžuju se i svi podređeni procesi datog roditelja. U slučaju da je jedan od podređenih procesa u datom trenutku kritičan, možda ćete morati odgoditi ubijanje dok ne bude sigurno. S druge strane, brza dvostruka provjera može vam reći koliko memorije ili procesorske snage troše zombi procesi. To pomaže utvrditi je li bolja opcija ubiti roditeljskog procesora i izvršiti ponovno pokretanje sustava u sljedećem ciklusu održavanja sustava koji je već zakazan.

Na Linuxu kako funkcioniraju stanja procesa?

Naravno, Linux mora pratiti sve aplikacije i demone koji se izvode na vašem računalu. Održavanje procesne tablice jedan je od načina kojim se to postiže.
Ovo je popis memorijskih struktura jezgre. Ovaj popis uključuje unos za svaki postupak koji sadrži neke informacije o njemu. Svaka od struktura tablice procesa sadrži vrlo malo informacija.

Oni spremaju ID procesa, nekoliko drugih podataka i pokazivač na kontrolni blok procesa (PCB).

Na PCB-u Linux pohranjuje sve podatke potrebne za traženje ili postavljanje za svaki proces. Kako se proces stvara, on se modificira, daje mu vrijeme obrade, a zatim uništava.

Na Linux PCB-u postoji preko 95 polja. Definiran je u strukturi zadatka koja ima više od 700 redaka. Na PCB-u se mogu naći sljedeće vrste podataka:

Stanja procesa prikazana su u nastavku

Bilo što od sljedećeg može biti „stanje procesa“:

Zaključak

Ako nisu dio ogromne horde, zombiji nisu toliko štetni. Nekoliko njih nije velika stvar, a brzim ponovnim pokretanjem riješit će ih se. Međutim, treba razmotriti jednu točku.

Linux arhitekture imaju maksimalan broj procesa i, kao rezultat toga, maksimalan broj ID brojeva procesa. Kada se postigne maksimalan broj zombi procesa na računalu, novi procesi se ne mogu pokrenuti.

Zombi procesi nisu procesi; oni su ostaci mrtvih procesa koje njihov roditeljski proces nije pravilno očistio. Međutim, ako primijetite da određena aplikacija ili postupak neprestano mrijesti zombije, trebali biste istražiti dalje.

Najvjerojatnije je to samo loše napisan program; u tom slučaju, možda postoji ažurirana verzija koja se očisti nakon što je njezino dijete pravilno obradi.

Emulirajte klikove mišem lebdeći mišem bez klika u sustavu Windows 10
Korištenje miša ili tipkovnice u pogrešnom držanju pretjerane upotrebe može rezultirati mnogim zdravstvenim problemima, uključujući naprezanje, sindro...
Dodajte geste miša u sustav Windows 10 pomoću ovih besplatnih alata
Posljednjih godina računala i operativni sustavi uvelike su se razvili. Bilo je vrijeme kada su korisnici morali koristiti naredbe za navigaciju kroz ...
Kontrolirajte i upravljajte kretanjem miša između više monitora u sustavu Windows 10
Dvostruki zaslon upravitelja miša omogućuje vam kontrolu i konfiguriranje kretanja miša između više monitora, usporavajući njegovo kretanje blizu gran...