Zombiju process Linux attiecas uz tiem jau mirušajiem procesiem, bet vienā vai otrā veidā tie joprojām atrodas sistēmas procesu tabulā. Trūkums ir tāds, ka kāda iemesla dēļ vecāks šo procesu nav iztīrījis no procesu tabulas. Parasti tas notiek pēc izpildes procesa pabeigšanas.
Parastais darbības veids Linux ir tāds, ka pēc tam, kad process ir izpildīts, tas paziņo vecākam, kas ir atbildīgs par procesa noņemšanu no tabulas. Diemžēl vecāki nespēj izņemt procesu no atmiņas gadījumos, kad vecāki nevar nolasīt bērna statusu. Tā tas notiek, ka mums procesu tabulā ir miruši procesi. Tos mēs saucam par zombiju procesiem.
Kas izraisa Linux Zombie procesus?
Kad tiek izveidots bērna process, slikti uzrakstīts vecāku process var neizdoties izsaukt funkciju wait (). Rezultātā tā zombiju bērni kavēsies atmiņā, līdz tiks nodzēsti.
Tas nozīmē, ka nekas nenovēro zīdaiņu procesu, lai mainītu stāvokli, un SIGCHLD signāls tiks ignorēts. Varbūt cita lietojumprogramma traucē vecāku procesa izpildi vai nu ar nepatīkamu programmēšanu, vai ar ļaunprātīgu nolūku.
Pareiza sistēmas uzkopšana nenotiks, ja vecāku process nenovēro stāvokļa izmaiņas bērna procesā.
Kad zīdaiņu process ir pabeigts, PCB un ieraksts procesa tabulā netiks noņemts. Rezultātā zombiju stāvoklis nekad netiek noņemts no PCB.
Zombijiem ir zināma atmiņa, taču tā parasti nav problēma. Tā kā Linux sistēmām ir ierobežots skaits PID (lai arī liels skaits), ja pietiekami daudz PID ir zombēti, neviens cits process nevar sākties. Tas ir apšaubāms, ka tas notiks.
Tomēr zombēti procesi liecina, ka lietojumprogrammā kaut kas nav kārtībā, un konkrētā programmā var būt kļūda.
Nevajadzētu pieļaut programmatūras kļūdas datu centros, un tās ir jānovērš.
Kamēr vaina nav novērsta, jums vajadzētu sekot līdzi un iznīcināt zombiju procesus.
Procesa ID nevar atkārtoti izmantot, kamēr tas nav palaists, tāpēc procesa tabulas ieraksts ir niecīgs.
Tā kā PCB ir daudz lielāks nekā procesu tabulas ieraksts 64 bitu operētājsistēmā, maz ticams, ka tas radīs problēmas.
Citiem procesiem pieejamo atmiņas apjomu varētu ietekmēt liels skaits zombiju. Tomēr, ja jums ir tik daudz zombiju, jums ir nopietnas problēmas ar vecāku lietojumprogrammu vai operētājsistēmas kļūda.
Tātad, ko jūs darāt, kad procedūra pārvēršas par zombiju? Jūs izsekojat un novēršat zombiju procesus.
Kā atrast zombiju procesu?
Sākotnējā zombiju procesa nogalināšanas sistēma vispirms ir tā identificēšana. Tā kā init process regulāri tiek attīrīts pēc zombijiem, viss, kas jums jādara, lai no tiem atbrīvotos, ir iznīcināt procesu, kas tos izveidoja.
Augšējā komanda ir ātrs veids, kā noskaidrot, vai jūsu apkārtnē ir kādi zombiji. Lai to panāktu, mēs izpildīsim šādu komandu.
tops
Šīs sistēmas zombiju procesu skaits tiks parādīts izvadē. Mūsu gadījumā iepriekš ir 0 zombiju.
Izmantojot komandu ps un ievadot to egrep, mēs varam iegūt to sarakstu. Valsts karogs zombiju procesiem ir “Z”, un dažreiz jūs redzēsit arī “nedarbojušos”.
tuts @ fosslinux: ~ $ ps aux | egrep "Z | vairs nedarbojas"
Sadalīsim šīs komandas dažādās sadaļas.
Z izvades kolonnā STAT identificē zombiju procesu.
[defunct] izejas pēdējā (COMMAND) kolonnā identificē arī zombiju procesu.
Ideālā gadījumā nav iespējams nogalināt Zombiju procesu, jo tas ir miris. Tā vietā mēs paziņojam vecākiem mēģināt un nolasīt bērna procesa statusu un visbeidzot notīrīt viņu no sistēmas tabulas. Lai aktivizētu šo procesu, mēs nosūtām SIGCHLD signālu procesa vecākam. Vecāku procesa ID vai tā sauktā PID identificēšana ietver šādas komandas palaišanu:
tuts @ fosslinux: ~ $ ps -o ppid =
Pēc Zombie's PID iegūšanas izmantojiet komandu SIGCHLD signālu iepriekš identificētajiem vecāku procesiem.
tuts @ fosslinux: ~ $ kill -s SIGCHLD
Dažos gadījumos tas nenoskaidro Zombiju procesu. Tas mūs aicina iesaistīties b vai c plānā. Iepriekšējais nozīmē vecāku procesa restartēšanu vai vecāku procesu nogalināšanu. No otras puses, pēdējie gadījumi ir saistīti ar sistēmas atsāknēšanu, it īpaši, ja Zombie process Zombie procesa dēļ var izraisīt pārtraukumu vai lielu pārspriegumu.
Zemāk ir komanda nogalināt vecāku procesu.
tuts @ fosslinux: ~ $ nogalināt -9
Gadījumā, ja vecāku process tiek nogalināts, tiek nogalināti arī visi attiecīgā vecāka bērnu procesi. Gadījumā, ja kāds no bērna procesiem attiecīgajā laikā ir kritisks, jums, iespējams, būs jāatliek slepkavība, līdz tā ir droša. No otras puses, ātra dubultā pārbaude var pateikt, cik daudz atmiņas vai apstrādes jaudas patērē Zombie procesi. Tas palīdz noteikt, vai labākā iespēja ir nogalināt vecāku procesoru, lai veiktu sistēmas pārstartēšanu nākamajā jau ieplānotajā sistēmas uzturēšanas ciklā.
Kā operētājsistēmā Linux darbojas procesu stāvokļi?
Protams, Linux ir jāseko visām lietojumprogrammām un dēmoniem, kas darbojas jūsu datorā. Procesu tabulas uzturēšana ir viens no veidiem, kā to paveikt.
Šis ir kodola atmiņas struktūru saraksts. Šajā sarakstā ir ieraksts par katru procesu, kas satur zināmu informāciju par to. Katrā no procesa tabulas struktūrām ir ļoti maz informācijas.
Viņi glabā procesa ID, dažas citas informācijas daļas un norādi uz procesa vadības bloku (PCB).
PCB ir vieta, kur Linux glabā visu informāciju, kas tai nepieciešama, lai meklētu vai iestatītu katram procesam. Kad process tiek izveidots, tas tiek modificēts, piešķirts apstrādes laiks un pēc tam iznīcināts.
Linux PCB ir vairāk nekā 95 lauki. Tas ir definēts uzdevuma struktūrā, kas ir garāka par 700 rindām. PCB var atrast šāda veida informāciju:
Procesa stāvokļi ir parādīti zemāk
- Procesa numurs: operētājsistēmas atšķirīgais identifikators.
- Programmas skaitītājs: Kad šim procesam atkal tiks piešķirta piekļuve procesoram, sistēma izmantos šo adresi, lai atrastu nākamo izpildāmā procesa instrukciju.
- Reģistri: Šajā procedūrā tiek izmantots CPU reģistru saraksts, ko sauc par reģistriem. Akumulatori, indeksu reģistri un kaudzes rādītāji var būt iekļauti sarakstā.
- Atvērto failu saraksts: ar šo procedūru saistītie faili ir iekļauti atvērto failu sarakstā.
- Informācija par procesora plānošanu: tiek izmantota, lai aprēķinātu, cik bieži un cik ilgi šis process saņem CPU apstrādes laiku.
PCB jāreģistrē procesa prioritāte, norādes uz plānošanas rindām un citi plānošanas parametri. - Informācija par atmiņas pārvaldību: informācija par atmiņu, kuru izmanto šis process, piemēram, procesa atmiņas sākuma un beigu adreses, kā arī norādes uz atmiņas lapām.
- Informācija par I / O statusu: visas ierīces, kuras process izmanto kā ieejas vai izejas.
“Procesa stāvoklis” var būt jebkurš no šiem veidiem:
- R: Darbīgs vai darbināms process. Tas darbojas, tas nozīmē, ka tas iegūst un izpilda CPU ciklus.
Procedūra, kas ir gatava darbam, gaida centrālā procesora slotu. - S: gulēšanas akts.
Process gaida darbības pabeigšanu, piemēram, ievades vai izvades darbību. Vai resursa pieejamība. - D: procedūra ir nepārtraukta miega stāvoklī. Tas izmanto bloķēšanas sistēmas zvanu, kas nozīmē, ka tas netiks turpināts, kamēr sistēmas zvani nebūs pabeigti. Atšķirībā no miega stāvokļa process šajā stāvoklī nereaģēs uz signāliem, kamēr sistēmas zvans nav pabeigts un izpilde nav atgriezusies procesā.
- T: Tā kā tas ieguva SIGSTOP signālu, process ir beidzies (apstājies).
Tas reaģēs tikai uz SIGKILL vai SIGCONT signāliem, vai nu nogalinot, vai arī norādot procesu turpināt. Pārslēdzoties no priekšplāna (fg) uz fona (bg) uzdevumiem, tas notiek. - Z: apzīmē Zombiju procesu. Kad process ir pabeigts, tas vienkārši nepazūd. Tā vietā tas atbrīvo visu atmiņu, kuru tas pašlaik izmanto, un iziet no atmiņas, taču tā procesa tabulas ieraksts un PCB paliek.
Tās stāvoklis ir iestatīts uz EXIT ZOMBIE, un vecāku procesam tiek teikts, ka zīdaiņu process ir pabeigts, izmantojot SIGCHLD signālu.
Secinājums
Zombiji nav tik kaitīgi, ja vien viņi nav daļa no plašā orda. Daži no tiem nav liels darījums, un ātra atsāknēšana tos notīrīs. Tomēr jāņem vērā viens punkts.
Linux arhitektūrās ir maksimālais procesu skaits un līdz ar to arī maksimālais procesu ID numuru skaits. Kad ir sasniegts datora maksimālais zombiju procesu skaits, jaunus procesus nevar sākt.
Zombiju procesi nav procesi; viņi ir mirušo procesu paliekas, kuras viņu vecāku process nav pareizi iztīrījis. Tomēr, ja pamanāt, ka konkrēta lietojumprogramma vai process nepārtraukti nārsto zombijus, jums tas ir jāizmeklē tālāk.
Visticamāk, tā ir tikai slikti uzrakstīta programma; tādā gadījumā varbūt ir kāda atjaunināta versija, kas tiek attīrīta pēc bērna pareizas apstrādes.