Noć vještica na Linuxu: kako ubiti zombi procese

halloween marka

Dan mrtvih dolazi i zato želimo napraviti ovaj mali tutorial od LxA kako bismo razgovarali o zombi procesi i kako ih možemo ubiti. Prvo što treba reći je što je zombi proces, a to je da kao što znate Linux kernel ima podsustav za upravljanje procesima i radi s planerom za stvaranje, promjenu prioriteta, slanje ili uklanjanje toka obrade CPU-a i ubijanje procesi. Pa, ovaj dio jezgre, poput ostalog sustava sličnog Unixu, razlikuje različita stanja procesa ...

Pa to možemo pronaći proces može biti u stanju spavanja (S), odnosno u snu. Također procesi u tekućem stanju (R) koji su oni koji se trenutno izvode ili izvode, procesi koji čekaju (D) koji su zaustavljeni u čekanju da budu prisutni, gestikulirani (T) ili suspendirani, a također i zombiji (Z) ili umrli. Zombi ili mrtvi proces je onaj koji je već uspješno završen, ali su oteti određeni sistemski resursi jer ga Linux još uvijek sprema u tablicu procesa. Već znate da kad proces završi, on ne bi trebao ostati u ovom stanju, već se dovršava i kernel oslobađa resurse kako bi ih drugi procesi mogli koristiti, u osnovi oslobađa zauzetu RAM memoriju ...

Pa, budući da nije zanimljivo imati ovu vrstu zombi procesa, iako nisu tako česti, možemo ih tražiti i eliminirati kako je ovdje naznačeno. Prva stvar je pronaći postoje li zombi procesi u našoj distribuciji i za to si možemo pomoći alati poput vrha ili poput ps. Na primjer, jedna od ove dvije mogućnosti:

ps -el | grep 'Z'

ps aux | grep defunct

I jednom kad smo otkriveni, možemo Ubij ga izravno sa:

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

Iako je druga alternativa pronalaženje nadređenih procesa, od do ubiti zombi proces Morate ubiti roditeljske procese koji ga održavaju, kao što ste možda zaključili:

ps -eo pid,ppid | grep <PID>

kill -9 <PPID>

Morat ćete zamijeniti prema ID-u zombi procesa koji ste pronašli i da biste ga ubili kill-om, upotrijebite ID nadređenog postupka koji zamjenjuje u primjeru, očito.


Ostavite svoj komentar

Vaša email adresa neće biti objavljen. Obavezna polja su označena s *

*

*

  1. Odgovoran za podatke: AB Internet Networks 2008 SL
  2. Svrha podataka: Kontrola neželjene pošte, upravljanje komentarima.
  3. Legitimacija: Vaš pristanak
  4. Komunikacija podataka: Podaci se neće dostavljati trećim stranama, osim po zakonskoj obvezi.
  5. Pohrana podataka: Baza podataka koju hostira Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.

  1.   pravili kuglice dijo

    Dobra stranica!
    Uvijek nas izvuku iz nevolje.

    Gdje stoji:
    Iako je druga alternativa pronaći roditeljske procese, budući da da biste ubili zombi proces morate ubiti roditeljske procese koji ga podržavaju, kao što ste možda zaključili:

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

    Morat ćete zamijeniti ID zombi procesa koji ste pronašli i da biste ga ubili s kill, očito upotrijebite ID roditeljskog procesa koji zamjenjuje u primjeru.

    možete dodati skriptu:

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

    Naravno, to nije zadatak koji običan korisnik obavlja cijelo vrijeme.
    Bilo bi korisno samo za administratora, ali je opasno pokrenuti ga kao root, jer svaki proces na sustavu može biti ubijen.

    U man kill ima ovu notu:

    BILJEŠKE Vaša ljuska (interpretator naredbenog retka) može imati ugrađenu naredbu za uklanjanje. Možete
    trebate pokrenuti naredbu opisanu ovdje kao / bin / kill da biste riješili sukob.

    Bash ima tu naredbu, ovo je dio man bash o tome:

    ubiti [-s sigspec | -n znak | -sigspec] [pid | posao] ...
    ubiti -l | -L [sigspec | izlaz_status]
    Pošaljite signal nazvan po sigspec ili signum procesima imenovanim po pid ili posao
    spec. sigspec je ili naziv signala koji ne razlikuje velika i mala slova kao što je SIGKILL (sa ili
    bez prefiksa SIG) ili signalnog broja; signum je signalni broj. Ako
    sigspec nije prisutan, tada se pretpostavlja SIGTERM. Argument -l navodi
    imena signala. Ako se daju bilo koji argumenti kada je dano -l, imena
    navedeni su signali koji odgovaraju argumentima, a status povratka je 0.
    Argument exit_status za -l je broj koji specificira ili broj signala ili
    izlazni status procesa koji je prekinut signalom. -L opcija je ekvivalentna
    posuđen na -l. kill vraća true ako je barem jedan signal uspješno poslan, ili
    false ako dođe do pogreške ili se naiđe na nevažeću opciju.

    Na početku objašnjavaju kako bash štiti procese, da izbjegne neke probleme, ali nije mi jasno kako bih mogao napraviti sigurnu skriptu za pokretanje kao root.
    Jedino čega se mogu sjetiti je da ga zaštitim ovako:

    $ mačka killppid.sh
    #! / bin / bash
    ako [$ USER == "root"]
    onda echo Nemojte izvoditi $ 0 kao root !!! to je opasno!
    izlaz
    fi

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

    $

    Koristite bash's kill, a ne / bin / kill

    Kako vidite da nisam baš dobro upućen u bash.
    Znate li kako napisati sigurnu skriptu koja se izvodi kao korisnik podređenog procesa, čak i ako se izvodi kao root?
    nešto ekvivalentno onome što bi se radilo ručno ovako:

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