Õpi Linuxit

Kuidas tappa Zombie protsessid Linuxis

Kuidas tappa Zombie protsessid Linuxis

Linuxi zombiprotsess viitab juba surnud protsessidele, kuid on ühel või teisel viisil endiselt süsteemi protsessitabelis olemas. Lünk on see, et mingil põhjusel ei puhastanud vanem seda protsessi protsessitabelist. Tavaliselt juhtub see pärast täitmisprotsessi lõppu.

Linuxi tavapärane toimimisviis on see, et pärast protsessi lõpuleviimist teavitab ta oma vanemat, kes vastutab protsessi tabelist eemaldamise eest. Kahjuks ei saa vanem protsessi mälust eemaldada, kui vanem ei saa lapse olekut lugeda. Nii juhtub, et meil on protsessitabelis surnud protsessid. Neid nimetame zombiprotsessideks.

Mis põhjustab Linux Zombie protsesse?

Lapse protsessi loomisel võib halvasti kirjutatud vanemaprotsess kutsuda funktsiooni wait (). Seetõttu jäävad selle zombilapsed mällu seni, kuni nad kustutatakse.

See tähendab, et miski ei jälgi imiku protsessi olekumuutuste osas ja SIGCHLD signaali ignoreeritakse. Võib-olla sekkub mõni muu rakendus vanemaprotsessi käivitamisse kas labase programmeerimise või pahatahtliku kavatsuse kaudu.

Korralikku süsteemihoidmist ei toimu, kui vanemaprotsess ei jälgi lapse protsessis olekumuutusi.

Kui imiku protsess on lõpule jõudnud, PCB-d ja protsessitabeli kirjet ei eemaldata. Selle tagajärjel ei eemaldata zombieolekut kunagi PCB-st.

Zombidel on küll veidi mälu, kuid see pole tavaliselt probleem. Kuna Linuxi süsteemidel on piiratud arv PID-sid (ehkki palju), ei saa piisavalt palju PID-sid zombida, kui ühtegi teist protsessi käivitada. On kahtlane, kas see juhtub.

Kuid zombitud protsessid viitavad sellele, et rakendusega on midagi valesti läinud ja konkreetses programmis võib olla viga.
Andmekeskuste tarkvaravigu ei tohiks lubada ja nendega tuleb tegeleda.
Sa peaksid silma peal hoidma ja hävitama zombiprotsesse, kuni viga on fikseeritud.

Protsessi ID-d ei saa enne selle käivitamist uuesti kasutada, seega on protsessitabeli kirje väike.
Kuna PCB on palju suurem kui protsessitabeli kirje 64-bitises operatsioonisüsteemis, ei põhjusta see tõenäoliselt probleeme.

Muude protsesside jaoks saadaolevat mälumahtu võib mõjutada suur hulk zombisid. Kui teil on aga nii palju zombisid, on teil vanemrakendusega või operatsioonisüsteemi veaga tõsine probleem.

Niisiis, mida sa teed, kui protseduurist saab zombie? Saate jälile ja kõrvaldate zombiprotsessid.

Kuidas leida zombiprotsessi?

Esmane peatus süsteemi zombiprotsessi tapmisele on kõigepealt selle tuvastamine. Kuna init-protsess puhastub pärast zombisid regulaarselt, tuleb neist vabanemiseks vaid hävitada protsess, mis neid lõi.

Ülemine käsk on kiire viis kontrollida, kas teie piirkonnas on zombisid. Selle saavutamiseks täidame järgmise käsu.

üles

ülemise käsu tulemused

Selle süsteemi zombiprotsesside arv kuvatakse väljundil. Meie ülaltoodud juhul on meil 0 zombit.
Kasutades käsklust ps ja sisestades selle egrep-i, saame nende loendi. Zombi protsesside osariigi lipp on "Z" ja mõnikord näete ka "kadunud".

tuts @ fosslinux: ~ $ ps aux | egrep "Z | kadunud"

Zombi protsesside osariigi lipp on Z või kadunud

Jaotame selle käsu erinevad jaotised.

Z väljundi veerus STAT tähistab zombiprotsessi.
[defunct] väljundi viimases (COMMAND) veerus identifitseerib ka zombiprotsessi.

Ideaalis pole zombiprotsessi võimalik tappa, sest see on surnud. Selle asemel teavitame vanemat proovimast ja lugemast lapse protsessi olekut ning puhastades nad lõpuks süsteemi tabelist. Selle protsessi käivitamiseks saadame SIGCHLD signaali protsessi vanemale. Vanemprotsessi ID või nn PID tuvastamine hõlmab järgmise käsu käivitamist:

tuts @ fosslinux: ~ $ ps -o ppid = 

Vanemprotsessi ID tuvastamine

Pärast Zombie PID saamist kasutage varem tuvastatud vanemprotsesside jaoks käsku SIGCHLD.

tuts @ fosslinux: ~ $ kill -s SIGCHLD 

kasutage käsku SIGCHLD signaal

Mõnel juhul ei saa see Zombie protsessi selgeks. See kutsub meid tegelema plaaniga b või c. Eelnev tähendab vanemprotsessi taaskäivitamist või algprotsesside tapmist. Teiselt poolt hõlmavad viimased juhtumid süsteemi taaskäivitamist, eriti kui Zombie protsess võib Zombie protsessi tõttu põhjustada katkestuse või tohutu tõusu.

Allpool on käsk tappa vanem protsess.

tuts @ fosslinux: ~ $ tappa -9 

käsk vanemaprotsess tappa

Juhul, kui vanemaprotsess tapetakse, tapetakse laiemalt ka kõik antud vanema lapseprotsessid. Kui üks lapseprotsessidest on antud ajahetkel kriitiline, peate võib-olla tapmise edasi lükkama, kuni see on ohutu. Teisest küljest võib kiire topeltkontroll teile öelda, kui palju mälu või töötlemisvõimsust Zombie protsessid kulutavad. See aitab kindlaks teha, kas parem võimalus on tappa vanemprotsessor süsteemi taaskäivitamiseks juba kavandatud süsteemi hoolduse järgmises tsüklis.

Kuidas töötavad Linuxis protsessid??

Muidugi peab Linux jälgima kõiki teie arvutis töötavaid rakendusi ja deemoneid. Protsessitabeli hooldamine on üks selle saavutamise viise.
See on tuuma mälustruktuuride loend. Selles loendis on kirje iga protsessi kohta, mis sisaldab selle kohta teavet. Iga protsessitabeli struktuur sisaldab väga vähe teavet.

Nad salvestavad protsessi ID, mõned muud infokillud ja kursori protsessi juhtplokile (PCB).

PCB on koht, kuhu Linux salvestab kogu teabe, mida ta vajab iga protsessi jaoks otsimiseks või seadistamiseks. Protsessi loomisel muudetakse seda, antakse töötlemisaeg ja seejärel hävitatakse.

Linuxi PCB-l on üle 95 välja. See on määratletud ülesande struktuuris, mis on üle 700 rea pikk. Trükkplaadilt leiate järgmist tüüpi teavet:

Protsessi olekuid illustreeritakse allpool

Protsessi olekuks võib olla ükskõik milline järgmistest:

Järeldus

Kui nad pole osa suurest hordist, pole zombid nii kahjulikud. Mõni üksik pole suurem asi ja kiire taaskäivitamine puhastab need. Siiski tuleb arvestada ühe punktiga.

Linuxi arhitektuurides on maksimaalne protsesside arv ja sellest tulenevalt maksimaalne protsesside ID-numbrite arv. Kui arvuti on saavutanud maksimaalse zombiprotsesside arvu, ei saa uusi protsesse käivitada.

Zombie protsessid pole protsessid; nad on surnud protsesside jäänused, mida nende vanemprotsess pole õigesti puhastanud. Kui aga märkate, et konkreetne rakendus või protsess kudevad pidevalt zombisid, peaksite seda veelgi uurima.

Tõenäoliselt on see lihtsalt halvasti kirjutatud programm; sel juhul on võib-olla mõni uuendatud versioon, mis puhastatakse pärast seda, kui tema laps on korralikult töötlenud.

Tasuta ja avatud lähtekoodiga mängumootorid Linuxi mängude arendamiseks
See artikkel hõlmab loetelu tasuta ja avatud lähtekoodiga mängumootoritest, mida saab kasutada 2D- ja 3D-mängude arendamiseks Linuxis. Selliseid mängu...
Tomb Raider for Linuxi õpetus
Shadow of the Tomb Raider on kaheteistkümnes täiendus seeria Tomb Raider - tegevus- ja seiklusmängude frantsiisile, mille on loonud Eidos Montreal. Ni...
Kuidas FPS-i suurendada Linuxis?
FPS tähistab Kaadrit sekundis. FPS-i ülesanne on mõõta kaadrisagedust video taasesitamisel või mängude esitamisel. Lihtsamalt öeldes nimetatakse iga s...