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
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"
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 =
Nakon dobivanja PID-a zombija, upotrijebite signal naredbe SIGCHLD za prethodno identificirane roditeljske procese.
tuts @ fosslinux: ~ $ kill -s SIGCHLD
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
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
- Broj procesa: prepoznatljivi identifikator operativnog sustava.
- Brojač programa: Kada se ovom procesu ponovo omogući pristup CPU, sustav će upotrijebiti ovu adresu za pronalaženje sljedeće upute procesa koji će se izvršiti.
- Registri: Ovaj postupak koristi popis CPU registara koji se nazivaju registri. Na popis mogu biti uključeni akumulatori, indeksni registri i pokazivači stogova.
- Otvori popis datoteka: Datoteke povezane s ovim postupkom nalaze se na popisu otvorenih datoteka.
- Informacije o zakazivanju CPU-a: Koriste se za izračunavanje koliko često i koliko dugo ovaj proces prima vrijeme obrade CPU-a.
PCB mora zabilježiti prioritet procesa, pokazivače na redove rasporeda i ostale parametre rasporeda. - Informacije o upravljanju memorijom: Informacije o memoriji koju ovaj proces koristi, poput početne i završne adrese memorije procesa, kao i pokazivači na stranice memorije.
- Informacije o statusu I / O: Bilo koji uređaj koji proces koristi kao ulaze ili izlaze.
Bilo što od sljedećeg može biti „stanje procesa“:
- R: Pokrenut ili postupak koji se može pokrenuti. Izvodi se, što znači da uzima i izvršava CPU cikluse.
Proces koji je spreman za pokretanje čeka utor za CPU. - S: Čin spavanja.
Proces čeka završetak radnje, poput ulazne ili izlazne operacije. Ili dostupnost resursa. - D: Postupak je u stanju nesmetanog spavanja. Koristi sistemski poziv za blokiranje, što znači da se neće nastaviti dok se sistemski pozivi ne dovrše. Za razliku od stanja mirovanja, proces u ovom stanju neće reagirati na signale sve dok sistemski poziv nije završen i izvršavanje se ne vrati u proces.
- T: Budući da je dobio signal SIGSTOP, postupak je završio (zaustavljen).
Odgovorit će samo na signale SIGKILL ili SIGCONT, bilo da će ubiti ili uputiti postupak da se nastavi. Kad se prebacite sa zadataka u prvi plan (fg) na pozadine (bg), to se događa. - Z: označava Zombie Process. Kad je postupak završen, on jednostavno ne nestaje. Umjesto toga, oslobađa memoriju koju trenutno koristi i izlazi iz memorije, ali unos tablice procesa i PCB ostaju.
Njegovo je stanje postavljeno na EXIT ZOMBIE, a roditeljskom procesu je rečeno da je postupak dojenčeta dovršen putem SIGCHLD signala.
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.