„Linux“ atliktas zombių procesas reiškia tuos jau mirusius procesus, tačiau vienaip ar kitaip jie vis dar yra sistemos procesų lentelėje. Spraga yra ta, kad dėl kažkokių priežasčių tėvas iš proceso lentelės neišvalė šio proceso. Paprastai tai įvyksta baigus vykdymo procesą.
Įprastas operacijos būdas sistemoje „Linux“ yra tai, kad baigus procesą, procesas praneša tėvui, kuris yra atsakingas už proceso pašalinimą iš lentelės. Deja, tėvai negali ištrinti proceso iš atminties tais atvejais, kai tėvai negali perskaityti vaiko būsenos. Taip atsitinka, kad procesų lentelėje turime negyvus procesus. Tai mes vadiname zombių procesais.
Kas sukelia „Linux Zombie“ procesus?
Kai sukuriamas vaiko procesas, blogai parašytas tėvų procesas gali nepavykti iškviesti laukimo () funkcijos. Todėl jos zombių vaikai užtruks atmintyje, kol bus užgesinti.
Tai reiškia, kad niekas nestebi kūdikio proceso būsenos pokyčių ir SIGCHLD signalas bus ignoruojamas. Galbūt kita programa trukdo tėvų procesui vykdyti, naudodama apgaulingą programavimą arba piktavališkus ketinimus.
Tinkamas sistemos tvarkymas nebus vykdomas, jei tėvų procesas nestebi būsenos pokyčių vaiko procese.
Kai kūdikio procesas baigsis, PCB ir įrašas proceso lentelėje nebus pašalintas. Dėl to zombių būsena niekada nėra pašalinama iš PCB.
Zombiai tikrai turi šiek tiek atminties, tačiau tai paprastai nėra problema. Kadangi „Linux“ sistemose yra galutinis PID skaičius (nors ir didelis skaičius), jei pakankamai ZID zombuojami, negalima pradėti jokio kito proceso. Abejotina, ar taip atsitiks.
Tačiau zombinti procesai rodo, kad programoje kažkas nepavyko ir kad konkrečioje programoje gali būti klaida.
Duomenų centruose esančios programinės įrangos klaidos neturėtų būti toleruojamos ir turi būti pašalintos.
Turėtumėte stebėti ir sunaikinti zombių procesus, kol gedimas bus pašalintas.
Proceso ID negalima pakartotinai naudoti, kol jis nepaleistas, todėl proceso lentelės įrašas yra nedidelis.
Kadangi PCB yra daug didesnis nei procesų lentelės įrašas 64 bitų operacinėje sistemoje, vargu ar tai sukels problemų.
Kituose procesuose turimos atminties kiekį gali paveikti daugybė zombių. Tačiau, jei turite tiek daug zombių, turite rimtų problemų dėl pagrindinės programos arba operacinės sistemos klaidos.
Taigi, ką jūs darote, kai procedūra virsta zombiu? Jūs susekti ir pašalinti zombių procesus.
Kaip rasti zombių procesą?
Pirmiausia sustabdžius zombių procesą sistemoje, pirmiausia reikia jį identifikuoti. Kadangi init procesas reguliariai valomas po zombių, viskas, ką turite padaryti, kad atsikratytumėte, yra sunaikinti juos sukūrusį procesą.
Viršutinė komanda yra greitas būdas sužinoti, ar jūsų vietovėje yra zombių. Norėdami tai pasiekti, vykdysime šią komandą.
viršuje
Šios sistemos zombių procesų skaičius bus rodomas išvestyje. Mūsų atveju aukščiau turime 0 zombių.
Naudodami komandą ps ir įvedę ją į egrep, galime gauti jų sąrašą. Valstybinė zombių procesų vėliava yra „Z“, taip pat kartais pamatysite „neveikiančią“.
tuts @ fosslinux: ~ $ ps aux | egrep "Z | neveikia"
Išskaidykime įvairius šios komandos skyrius.
Z išvesties stulpelyje STAT identifikuoja zombių procesą.
[defunct] paskutiniame išvesties stulpelyje (COMMAND) taip pat nurodo zombių procesą.
Idealiu atveju neįmanoma nužudyti Zombių proceso, nes jis yra miręs. Vietoj to, mes pranešame tėvams, kad jie bandytų ir perskaitytų vaiko proceso būseną ir galiausiai išvalytų juos iš sistemos lentelės. Norėdami suaktyvinti šį procesą, mes siunčiame SIGCHLD signalą proceso tėvams. Nustatant pirminį proceso ID arba vadinamąjį PID, reikia paleisti šią komandą:
tuts @ fosslinux: ~ $ ps -o ppid =
Gavę „Zombie“ PID, naudokite komandą SIGCHLD signalą anksčiau nustatytiems pirminiams procesams.
tuts @ fosslinux: ~ $ kill -s SIGCHLD
Kai kuriais atvejais tai nepaaiškina „Zombie“ proceso. Tai ragina mus įsitraukti į b arba c planą. Ankstesnis reiškia pagrindinio proceso paleidimą iš naujo arba pirminių procesų nužudymą. Kita vertus, pastarieji atvejai apima sistemos perkrovimą, ypač kai „Zombie“ procesas dėl „Zombie“ proceso gali sukelti pertrauką arba didžiulį antplūdį.
Žemiau yra komanda nužudyti tėvų procesą.
tuts @ fosslinux: ~ $ nužudyti -9
Jei tėvų procesas yra nužudomas, taip pat nužudomi visi konkretaus tėvo procesai. Jei tam tikru metu vienas iš vaiko procesų yra kritinis, jums gali tekti atidėti žudymą, kol jis bus saugus. Kita vertus, greitas dvigubas patikrinimas gali parodyti, kiek atminties ar apdorojimo energijos sunaudoja „Zombie“ procesai. Tai padeda nustatyti, ar geresnė parinktis yra nužudyti pagrindinį procesorių atlikti sistemos perkrovimą per kitą jau suplanuotą sistemos priežiūros ciklą.
„Linux“ sistemoje veikia procesų būsenos?
Žinoma, „Linux“ turi sekti visas jūsų kompiuteryje veikiančias programas ir demonus. Proceso lentelės palaikymas yra vienas iš būdų, kaip tai pasiekti.
Tai yra branduolio atminties struktūrų sąrašas. Šiame sąraše yra kiekvieno proceso įrašas, kuriame yra tam tikra informacija apie jį. Kiekvienoje proceso lentelių struktūroje yra labai mažai informacijos.
Jie saugo proceso ID, keletą kitų informacijos elementų ir žymeklį į proceso valdymo bloką (PCB).
PCB yra vieta, kur „Linux“ saugo visą informaciją, kurios reikia kiekvienam procesui ieškoti ar nustatyti. Kuriant procesą, jis yra modifikuojamas, suteikiamas apdorojimo laikas ir tada sunaikinamas.
„Linux“ PCB yra daugiau nei 95 laukai. Tai apibrėžta užduočių struktūroje, kuri yra daugiau nei 700 eilučių. PCB galima rasti šių rūšių informaciją:
Proceso būsenos iliustruojamos žemiau
- Proceso numeris: skiriamasis operacinės sistemos identifikatorius.
- Programos skaitiklis: Kai šiam procesui dar kartą suteikiama prieiga prie procesoriaus, sistema naudos šį adresą norėdama rasti kitą vykdytino proceso nurodymą.
- Registrai: Ši procedūra naudoja CPU registrų, vadinamų registrais, sąrašą. Akumuliatoriai, indeksų registrai ir kaupiklių rodyklės gali būti įtraukti į sąrašą.
- Atidaryti failų sąrašą: Su šia procedūra susieti failai yra įtraukti į Atidaryti failų sąrašą.
- Informacija apie procesoriaus planavimą: naudojama norint apskaičiuoti, kaip dažnai ir kiek laiko šis procesas gauna procesoriaus apdorojimo laiką.
PCB turi įrašyti proceso prioritetą, nuorodas į planavimo eiles ir kitus planavimo parametrus. - Atminties valdymo informacija: informacija apie atmintį, kurią naudoja šis procesas, pvz., Proceso atminties pradžios ir pabaigos adresai, taip pat nuorodos į atminties puslapius.
- Informacija apie įvesties / išvesties būseną: visi įrenginiai, kuriuos procesas naudoja kaip įvestis arba išvestis.
„Proceso būsena“ gali būti bet kuris iš šių būdų:
- R: Vykdomas arba paleidžiamas procesas. Jis veikia, o tai reiškia, kad jis gauna ir vykdo procesoriaus ciklus.
Paruošta vykdyti procedūra laukia procesoriaus lizdo. - S: Miegas.
Procesas laukia, kol bus baigtas veiksmas, pvz., Įvesties ar išvesties operacija. Arba išteklių prieinamumas. - D: Procedūra yra nepertraukiamo miego būsena. Jis naudoja blokavimo sistemos skambutį, o tai reiškia, kad jis nebus tęsiamas, kol sistemos skambučiai nebus baigti. Skirtingai nuo būsenos „Miego“, procesas šioje būsenoje nereaguos į signalus, kol sistemos skambutis nebus baigtas ir vykdymas nebus grąžintas į procesą.
- T: Kadangi jis gavo SIGSTOP signalą, procesas baigėsi (sustojo).
Jis reaguos tik į SIGKILL arba SIGCONT signalus, žudydamas arba nurodydamas tęsti procesą. Pereinant iš pirmojo plano (fg) į fono (bg) užduotis, taip atsitinka. - Z: reiškia „Zombie Process“. Baigus procesą, jis tiesiog neišnyksta. Vietoj to, ji atlaisvina bet kokią šiuo metu naudojamą atmintį ir išeina iš atminties, tačiau jos procesų lentelės įrašas ir PCB lieka.
Jo būsena nustatyta į EXIT ZOMBIE, o pirminiam procesui sakoma, kad kūdikio procesas buvo baigtas per SIGCHLD signalą.
Išvada
Zombiai nėra tokie žalingi, nebent jie yra didžiulės ordos dalis. Keletas iš jų nėra didelis dalykas, todėl greitai juos perkrausite. Tačiau reikia atsižvelgti į vieną dalyką.
„Linux“ architektūrose yra maksimalus procesų skaičius ir dėl to maksimalus procesų ID numerių skaičius. Kai pasiekiamas didžiausias kompiuterio zombių procesų skaičius, naujų procesų pradėti negalima.
Zombių procesai nėra procesai; jie yra mirusių procesų likučiai, kurių jų pirminis procesas nebuvo tinkamai išvalytas. Tačiau jei pastebite, kad tam tikra programa ar procesas nuolat neršia zombius, turėtumėte tęsti tyrimą.
Greičiausiai tai tik prastai parašyta programa; tokiu atveju galbūt yra atnaujinta versija, kuri išvaloma, kai vaikas tinkamai apdoroja.