Helovinas „Linux“: kaip užmušti zombių procesus

Helovino antspaudas

Ateina mirusiųjų diena, todėl norime pakalbėti apie „LxA“ šią mažą pamoką zombių procesai ir kaip mes galime juos nužudyti. Pirmiausia reikia pasakyti, kas yra zombių procesas, ir tai yra tai, kad, kaip žinote, „Linux“ branduolys turi posistemį procesams valdyti ir dirba su tvarkaraščiu kurdamas, keisdamas prioritetą, siunčiant ar pašalinant procesoriaus apdorojimo srautą ir nužudyti procesus. Na, ši branduolio dalis, kaip ir visos „Unix“ tipo sistemos, išskiria įvairias procesų būsenas ...

Taigi mes galime tai rasti procesas jis gali būti miego (S) būsenoje, tai yra miegoti. Taip pat procesai veikiančioje būsenoje (R) yra tie, kurie šiuo metu veikia arba veikia, laukiantys procesai (D), kurie nustojo laukti, kol bus laukiami, gestpt (T) arba sustabdyti, taip pat zombiai (Z) arba mirę. Zombis arba negyvas procesas yra tas, kuris jau sėkmingai nutrauktas, tačiau užgrobti tam tikri sistemos ištekliai, nes „Linux“ vis dar jį saugo procesų lentelėje. Jūs jau žinote, kad pasibaigus procesui, jis neturėtų likti šioje būsenoje, bet užbaigtas, o branduolys išlaisvina išteklius, kad kiti procesai galėtų juos naudoti, iš esmės tai atlaisvina užimtą RAM ...

Na, kadangi neįdomu turėti tokio tipo zombių procesus, nors jie ir nėra tokie dažni, galime jų ieškoti ir pašalinti, kaip nurodyta čia. Pirmas dalykas yra išsiaiškinti, ar mūsų zonde vyksta zombių procesai ir tam galime padėti patys įrankiai, pavyzdžiui, viršuje arba kaip ps. Pavyzdžiui, viena iš šių dviejų parinkčių:

ps -el | grep 'Z'

ps aux | grep defunct

O kai tik aptiksime, galėsime Nužudyk jį tiesiogiai su:

kill -HUP `ps -A -ostat,ppid,pid,cmd | grep -e ‘^[Zz]’ | awk ‘{print $2}’`

Nors kita alternatyva yra surasti pirminius procesus, nuo to nužudyti zombių procesą Jūs turite nužudyti tėvų procesus, kurie tai palaiko, kaip jūs galėjote padaryti išvadą:

ps -eo pid,ppid | grep <PID>

kill -9 <PPID>

Teks pakeisti pagal surasto zombio proceso ID ir nužudyti jį nužudymu, naudokite pirminio proceso ID pavyzdyje akivaizdu.


Palikite komentarą

Jūsų elektroninio pašto adresas nebus skelbiamas. Privalomi laukai yra pažymėti *

*

*

  1. Už duomenis atsakingas: AB Internet Networks 2008 SL
  2. Duomenų paskirtis: kontroliuoti šlamštą, komentarų valdymą.
  3. Įteisinimas: jūsų sutikimas
  4. Duomenų perdavimas: Duomenys nebus perduoti trečiosioms šalims, išskyrus teisinius įsipareigojimus.
  5. Duomenų saugojimas: „Occentus Networks“ (ES) talpinama duomenų bazė
  6. Teisės: bet kuriuo metu galite apriboti, atkurti ir ištrinti savo informaciją.

  1.   pagamino kamuoliukus sakė

    Gera svetainė!
    Jie visada mus išmuš iš bėdų.

    Kur sakoma:
    Nors kita alternatyva yra rasti pirminius procesus, nes norėdami nužudyti zombių procesą, turite nužudyti jį palaikančius pirminius procesus, kaip galėjote padaryti išvadą:

    1 | ps -eo pid, ppid | grep
    2|
    3 | nužudyti -9

    Turėsite pakeisti rasto zombio proceso ID, o norėdami jį nužudyti, naudokite pavyzdyje pakeičiančio pagrindinio proceso ID.

    galite pridėti scenarijų:

    $ katė killppid.sh
    #! / bin / bash
    nužudyti -9 $ (ps -eo pid, ppid | awk '$ 1 ==' $ {1} '{spausdinti $ 2}')

    Žinoma, tai nėra užduotis, kurią įprastas vartotojas atlieka nuolat.
    Tai būtų naudinga tik administratoriui, bet pavojinga paleisti kaip root, nes tai gali užmušti bet kurį procesą sistemoje.

    Žmogaus nužudyme yra tokia pastaba:

    PASTABOS Jūsų apvalkalas (komandų eilutės interpretatorius) gali turėti įmontuotą žudymo komandą. Tu gali
    Norėdami išspręsti konfliktą, turite paleisti komandą, aprašytą čia kaip / bin / kill.

    Bašas turi tokią komandą, štai tokia žmogaus dalis apie tai:

    nužudyti [-s sigspec | -n signum | -sigspec] [pid | darbo specifika] ...
    nužudyti -l | -L [sigspec | išėjimo_būsena]
    Siųskite signalą, pavadintą sigspec arba signum, į procesus, pavadintus pid arba job
    spec. sigspec yra didžiosios ir mažosios raidės nejautrus signalo pavadinimas, pvz., SIGKILL (su arba
    be SIG priešdėlio) arba signalo numerio; signum yra signalo skaičius. Jeigu
    sigspec nėra, tada daroma prielaida, kad SIGTERM. Argumente -l išvardijami
    signalų pavadinimai. Jei pateikiami argumentai, kai pateikiamas -l, pavadinimai
    pateikiami argumentus atitinkantys signalai, o grąžinimo būsena yra 0.
    Argumentas exit_status į -l yra skaičius, nurodantis signalo numerį arba
    signalu užbaigto proceso išėjimo būsena. Parinktis -L yra lygiavertė
    paskolino -l. kill grąžina true, jei bent vienas signalas buvo sėkmingai išsiųstas, arba
    false, jei įvyksta klaida arba aptinkama netinkama parinktis.

    Pradžioje jie paaiškina, kaip bash apsaugo procesus, kad būtų išvengta problemų, bet man neaišku, kaip aš galėčiau sukurti saugų scenarijų, kuris veiktų kaip root.
    Vienintelis dalykas, apie kurį galiu galvoti, yra apsaugoti jį taip:

    $ katė killppid.sh
    #! / bin / bash
    jei [$ USER == "root"]
    tada echo Nenaudokite $ 0 kaip root !!! tai pavojinga!
    išeiti
    fi

    nužudyti -9 $ (ps -eo pid, ppid | awk '$ 1 ==' $ {1} '{spausdinti $ 2}')

    $

    Naudokite bash's kill, o ne / bin / kill

    Kaip matai, aš nelabai išmanau bash.
    Ar žinote, kaip parašyti saugų scenarijų, kuris veikia kaip antrinio proceso vartotojas, net jei jis veikia kaip root?
    kažkas panašaus į tai, kas būtų daroma rankiniu būdu, pavyzdžiui:

    $ su;
    $ kill -9 $ (ps -eo pid, ppid | awk '$ 1 ==' $ {1} '{spausdinti $ 2}')