Halloween Linuxissa: kuinka tappaa zombiprosessit

halloween leima

Kuolleiden päivä on tulossa, ja siksi haluamme tehdä tämän LxA: n pienen opetusohjelman puhuaksemme zombie-prosessit ja kuinka voimme tappaa heidät. Ensinnäkin on sanottava, mitä zombie-prosessi on, ja se on, että kuten tiedät, Linux-ytimessä on alijärjestelmä prosessien hallitsemiseksi ja se toimii ajastimen kanssa luomaan, muuttamaan prioriteettia, lähettämään tai poistamaan suorittimen prosessointivirta ja tappaa prosessit. No, tämä ytimen osa, kuten muutkin Unixin kaltaiset järjestelmät, erottaa prosessien eri tilat ...

Joten voimme löytää sen prosessi se voi olla nukkumistilassa (S) eli nukkumassa. Myös käynnissä olevassa tilassa olevat prosessit, jotka ovat käynnissä tai ovat käynnissä, odottavat (D) prosessit, jotka on pysäytetty odottamaan osallistumista, gestpt (T) tai keskeytetty, ja myös zombie (Z) tai kuollut. Zombie tai kuollut prosessi on jo onnistuneesti lopetettu, mutta siinä on kaapattu tiettyjä järjestelmäresursseja, koska Linux tallentaa sitä edelleen prosessitaulukossa. Tiedät jo, että kun prosessi päättyy, sen ei pitäisi pysyä tässä tilassa, vaan se on valmis ja ydin vapauttaa resurssit, jotta muut prosessit voivat käyttää niitä, pohjimmiltaan se vapauttaa miehitetyn RAM-muistin ...

No, koska ei ole mielenkiintoista saada tämän tyyppisiä zombi-prosesseja, vaikka ne eivät olekaan niin yleisiä, voimme etsiä ja poistaa niitä kuten tässä on esitetty. Ensimmäinen asia on selvittää, onko distroissamme zombiprosesseja, ja voimme auttaa itseämme työkalut, kuten top tai ps. Esimerkiksi yksi näistä kahdesta vaihtoehdosta:

ps -el | grep 'Z'

ps aux | grep defunct

Ja kun se on havaittu, voimme tapa hänet suoraan:

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

Vaikka toinen vaihtoehto on löytää vanhemman prosessit, siitä lähtien tappaa zombie-prosessin Sinun täytyy tappaa sitä ylläpitävät vanhempaprosessit, kuten olet voinut päätellä:

ps -eo pid,ppid | grep <PID>

kill -9 <PPID>

Sinun on korvattava löytämäsi zombiprosessin tunnuksella ja tappaa se tappamalla, käytä vanhemman prosessin tunnusta esimerkissä ilmeisesti.


Kommentti, jätä sinun

Jätä kommentti

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *

*

*

  1. Vastaa tiedoista: AB Internet Networks 2008 SL
  2. Tietojen tarkoitus: Roskapostin hallinta, kommenttien hallinta.
  3. Laillistaminen: Suostumuksesi
  4. Tietojen välittäminen: Tietoja ei luovuteta kolmansille osapuolille muutoin kuin lain nojalla.
  5. Tietojen varastointi: Occentus Networks (EU) isännöi tietokantaa
  6. Oikeudet: Voit milloin tahansa rajoittaa, palauttaa ja poistaa tietojasi.

  1.   tehnyt palloja dijo

    Hyvä sivusto!
    He saavat meidät aina pois ongelmista.

    Missä sanotaan:
    Vaikka toinen vaihtoehto on löytää emoprosessit, koska zombie-prosessin tappamiseksi sinun on tapettava sitä tukevat emoprosessit, kuten olet ehkä päättänyt:

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

    Sinun täytyy korvata löytämäsi zombie-prosessin tunnus ja tappaa se killilla, käytä luonnollisesti esimerkissä korvaavan emoprosessin ID:tä.

    voit lisätä skriptin:

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

    Se ei tietenkään ole tehtävä, jota tavallinen käyttäjä suorittaa jatkuvasti.
    Siitä olisi hyötyä vain järjestelmänvalvojalle, mutta on vaarallista ajaa sitä pääkäyttäjänä, koska kaikki järjestelmän prosessit voidaan tappaa.

    Man killissa on tämä huomautus:

    HUOMAUTUKSIA Shellissä (komentorivin tulkissa) voi olla sisäänrakennettu kill-komento. Sinä voit
    täytyy suorittaa komento, joka on kuvattu tässä nimellä / bin / kill ratkaistaksesi ristiriidan.

    Bashilla on tämä komento, tämä on osa miestä siitä:

    tappaa [-s sigspec | -n signum | -sigspec] [pid | työpaikka] ...
    tappaa -l | -L [sigspec | exit_status]
    Lähetä sigspecin tai signumin nimetty signaali prosesseille, jotka on nimetty pid:llä tai työllä
    spec. sigspec on joko isot ja pienet kirjaimet erotteleva signaalinimi, kuten SIGKILL (ja tai
    ilman SIG-etuliitettä) tai signaalinumeroa; signum on signaalinumero. Jos
    sigspec ei ole läsnä, silloin oletetaan SIGTERM. Argumentti -l luettelee
    signaalien nimet. Jos argumentteja annetaan, kun -l on annettu, nimet
    argumentteja vastaavat signaalit luetellaan ja palautustila on 0.
    Exit_status -argumentti arvoon -l on numero, joka määrittää joko signaalin numeron tai
    signaalin päättämän prosessin poistumistila. Vaihtoehto -L on vastaava
    lainattu -l. kill palauttaa true, jos vähintään yksi signaali on lähetetty onnistuneesti, tai
    false, jos tapahtuu virhe tai virheellinen vaihtoehto.

    Alussa he selittävät kuinka bash suojaa prosesseja ongelmien välttämiseksi, mutta minulle ei ole selvää, kuinka voin tehdä turvallisen skriptin toimimaan pääkäyttäjänä.
    Ainoa asia, mitä voin ajatella, on suojata se seuraavasti:

    $ kissa killppid.sh
    #! / Bin / bash
    jos [$ USER == "root"]
    sitten echo Älä käytä $ 0 rootina !!! se on vaarallista!
    poistua
    fi

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

    $

    Käytä bash's kill -toimintoa, älä / bin / kill

    Kuinka näet, etten ole kovin perehtynyt bashiin.
    Tiedätkö kuinka kirjoittaa suojattu komentosarja, joka toimii alatason prosessin käyttäjänä, vaikka se toimisi pääkäyttäjänä?
    jotain vastaavaa kuin tehtäisiin manuaalisesti näin:

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