Halloween Linuxis: kuidas tappa zombiprotsesse

halloweeni tempel

Surnud päev on saabumas ja seetõttu tahame teha selle väikese LxA õpetuse, et sellest rääkida zombie protsessid ja kuidas me saame neid tappa. Kõigepealt tuleb öelda, mis on zombiprotsess, ja see on see, et nagu teate, on Linuxi tuumal protsesside haldamiseks alamsüsteem ja ta töötab koos ajastajaga protsessori loomiseks, prioriteedi muutmiseks, protsessori voo saatmiseks või eemaldamiseks ning tappa protsesse. Noh, see tuuma osa, nagu ka ülejäänud Unixi-laadsed süsteemid, eristab erinevaid protsesside olekuid ...

Nii et võime selle leida protsess see võib olla magavas (S) olekus, see tähendab magada. Samuti töötavad töötavas olekus (R) olevad protsessid, mis praegu töötavad või töötavad, protsessid, mis ootavad (D), mis on osalemise ootamise peatatud, gestpt (T) või peatatud, samuti zombid (Z) või surnud. Zombie või surnud protsess on protsess, mis on juba edukalt lõpetatud, kuid millel on kaaperdatud teatud süsteemiressursid, kuna Linux salvestab seda endiselt protsessitabelisse. Te juba teate, et kui protsess lõpeb, ei tohiks see jääda sellesse olekusse, kuid see lõpeb ja tuum vabastab ressursid, et muud protsessid saaksid neid kasutada, põhimõtteliselt vabastab see hõivatud RAM-i ...

Noh, kuna seda tüüpi zombiprotsesside pakkumine pole huvitav, kuigi need pole nii sagedased, võime neid otsida ja kõrvaldada, nagu siin näidatud. Esimene asi on leida, kas meie distros on zombiprotsesse ja selle jaoks saame end aidata tööriistad nagu top või nagu ps. Näiteks üks neist kahest võimalusest:

ps -el | grep 'Z'

ps aux | grep defunct

Ja kui see on avastatud, saame tappa ta otse koos:

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

Ehkki teine ​​alternatiiv on leida vanemaprotsessid, alates sellest tappa zombie protsess Peate tapma vanemprotsessid, mis seda toetavad, nagu võisite järeldada:

ps -eo pid,ppid | grep <PID>

kill -9 <PPID>

Peate asendama leitud zombiprotsessi ID järgi ja tapmiseks tapmisega kasutage vanemprotsessi ID-d näites ilmselgelt.


Jäta oma kommentaar

Sinu e-postiaadressi ei avaldata. Kohustuslikud väljad on tähistatud *

*

*

  1. Andmete eest vastutav: AB Internet Networks 2008 SL
  2. Andmete eesmärk: Rämpsposti kontrollimine, kommentaaride haldamine.
  3. Seadustamine: teie nõusolek
  4. Andmete edastamine: andmeid ei edastata kolmandatele isikutele, välja arvatud juriidilise kohustuse alusel.
  5. Andmete salvestamine: andmebaas, mida haldab Occentus Networks (EL)
  6. Õigused: igal ajal saate oma teavet piirata, taastada ja kustutada.

  1.   tegid pallid DIJO

    Hea sait!
    Nad aitavad meid alati hädast välja.

    Kus öeldakse:
    Ehkki teine ​​​​alternatiiv on vanemate protsesside leidmine, peate zombiprotsessi tapmiseks tapma seda toetavad vanemprotsessid, nagu olete võib-olla järeldanud:

    1 | ps -eo pid, ppid | grep
    2|
    3 | tappa -9

    Peate leitud zombieprotsessi ID asendama ja selle tapmiseks killuga kasutage loomulikult näites asendava vanemprotsessi ID-d.

    saate lisada skripti:

    $ kass killppid.sh
    #! / bin / bash
    kill -9 $ (ps -eo pid, ppid | awk '$ 1 ==' $ {1} '{print $ 2}')

    Loomulikult ei ole see ülesanne, mida tavaline kasutaja kogu aeg täidab.
    See oleks kasulik ainult administraatorile, kuid seda on ohtlik käivitada administraatorina, kuna see võib tappa kõik süsteemis olevad protsessid.

    Inimese tapmise puhul on sellel järgmine märge:

    MÄRKUSED Teie shellil (käsurea tõlgendajal) võib olla sisseehitatud killikäsk. Sa võid
    konflikti lahendamiseks peate käivitama käsu, mida on kirjeldatud siin kui / bin / kill.

    Bashil on see käsk, see on mehe osa sellest:

    tappa [-s sigspec | -n-märk | -sigspec] [pid | töö spetsifikatsioon] ...
    kill -l | -L [sigspec | väljumise_olek]
    Saada sigspeci või signumi nimega signaal protsessidele, mille nimi on pid või töö
    spec. sigspec on kas tõstutundlik signaalinimi, näiteks SIGKILL (koos või
    ilma SIG-eesliiteta) või signaali number; signum on signaali number. Kui
    sigspec puudub, siis eeldatakse SIGTERM. Argument -l loetleb
    signaali nimed. Kui -l on antud argumente, siis the nimed
    argumentidele vastavad signaalid on loetletud ja tagastamise olek on 0.
    Argument exit_status väärtusele -l on arv, mis määrab kas signaali numbri või
    signaaliga lõpetatud protsessi väljumise olek. Valik -L on samaväärne
    laenatud -l. kill tagastab tõene, kui vähemalt üks signaal saadeti edukalt või
    väär, kui ilmneb viga või ilmneb kehtetu valik.

    Alguses selgitatakse, kuidas bash protsesse kaitseb, et vältida mõningaid probleeme, kuid mulle pole selge, kuidas saaksin teha turvalise skripti, mis töötaks administraatorina.
    Ainus, millele ma mõtlen, on kaitsta seda järgmiselt:

    $ kass killppid.sh
    #! / bin / bash
    kui [$ USER == "root"]
    siis echo Ära kasuta $ 0 root kasutajana !!! see on ohtlik!
    väljumiseks
    fi

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

    $

    Kasutage bash's kill, mitte / bin / kill

    Kuidas sa näed, et ma pole bashis kuigi hästi kursis.
    Kas teate, kuidas kirjutada turvalist skripti, mis töötab alamprotsessi kasutajana, isegi kui see töötab administraatorina?
    midagi samaväärset sellega, mida tehakse käsitsi järgmiselt:

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