Uzziniet Linux

Kā nogalināt Zombie procesus Linux

Kā nogalināt Zombie procesus Linux

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

top komandu rezultāti

Šī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"

Valsts karogs zombiju procesiem ir Z vai 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 = 

Vecāku procesa ID identificēšana

Pēc Zombie's PID iegūšanas izmantojiet komandu SIGCHLD signālu iepriekš identificētajiem vecāku procesiem.

tuts @ fosslinux: ~ $ kill -s SIGCHLD 

izmantojiet komandu SIGCHLD signal

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 

komanda nogalināt vecāku procesu

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 stāvoklis” var būt jebkurš no šiem veidiem:

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.

Kā mainīt peles un skārienpaliktņu ritināšanas virzienu operētājsistēmā Windows 10
Pele un SkārienpaliktnisTas ne tikai padara skaitļošanu vienkāršu, bet arī efektīvāku un mazāk laikietilpīgu. Mēs nevaram iedomāties dzīvi bez šīm ier...
Kā mainīt peles rādītāja un kursora izmēru, krāsu un shēmu operētājsistēmā Windows 10
Peles rādītājs un kursors operētājsistēmā Windows 10 ir ļoti svarīgi operētājsistēmas aspekti. To var teikt arī par citām operētājsistēmām, tāpēc pati...
Bezmaksas un atvērtā koda spēļu dzinēji Linux spēļu izstrādei
Šis raksts aptvers bezmaksas un atvērtā koda spēļu motoru sarakstu, kurus var izmantot, lai izstrādātu 2D un 3D spēles Linux. Šādu spēļu dzinēju ir da...