Helovīns uz Linux: kā nogalināt zombiju procesus

Halovīna zīmogs

Tuvojas mirušo diena, un tāpēc mēs vēlamies veikt šo mazo LxA apmācību, lai runātu par zombiju procesi un kā mēs viņus varam nogalināt. Vispirms jāsaka, kāds ir zombiju process, un tas ir tas, ka, kā jūs zināt, Linux kodolam ir apakšsistēma, lai pārvaldītu procesus, un strādā ar plānotāju, lai izveidotu, mainītu prioritāti, nosūtītu vai noņemtu CPU apstrādes plūsmu un nogalināt procesus. Šī kodola daļa, tāpat kā pārējās Unix līdzīgās sistēmas, atšķir dažādus procesu stāvokļus ...

Tātad mēs to varam atrast process tas var būt miega (S) stāvoklī, tas ir, gulēt. Arī procesi darbības stāvoklī (R), kas pašlaik darbojas vai darbojas, procesi, kas gaida (D), kuri vairs nav gaidījuši apmeklējumu, gestpt (T) vai apturēti, kā arī zombiji (Z) vai mirušie. Zombiju vai miris process ir process, kas jau ir veiksmīgi pārtraukts, taču ir nolaupīti noteikti sistēmas resursi, jo Linux joprojām to saglabā procesu tabulā. Jūs jau zināt, ka, beidzoties procesam, tam nevajadzētu palikt šajā stāvoklī, bet gan pabeigt, un kodols atbrīvo resursus, lai citi procesi tos varētu izmantot, būtībā tas atbrīvo aizņemto RAM ...

Nu, tā kā nav interesanti veikt šāda veida zombiju procesus, kaut arī tie nav tik bieži, mēs varam tos meklēt un novērst, kā norādīts šeit. Pirmā lieta ir atrast, vai mūsu distro ir zombiju procesi, un tāpēc mēs varam sev palīdzēt tādi rīki kā top vai ps. Piemēram, viena no šīm divām iespējām:

ps -el | grep 'Z'

ps aux | grep defunct

Un, kad tas ir atklāts, mēs varam Nogalini viņu tieši ar:

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

Lai gan vēl viena alternatīva ir atrast vecāku procesus, kopš tā laika nogalināt zombiju procesu Jums ir jānogalina vecāku procesi, kas to uztur, kā jūs, iespējams, secinājāt:

ps -eo pid,ppid | grep <PID>

kill -9 <PPID>

Jums būs jāaizstāj pēc atrastā zombiju procesa ID un, lai to nogalinātu ar slepkavību, izmantojiet vecāku procesa ID piemērā acīmredzami.


Atstājiet savu komentāru

Jūsu e-pasta adrese netiks publicēta. Obligātie lauki ir atzīmēti ar *

*

*

  1. Atbildīgais par datiem: AB Internet Networks 2008 SL
  2. Datu mērķis: SPAM kontrole, komentāru pārvaldība.
  3. Legitimācija: jūsu piekrišana
  4. Datu paziņošana: Dati netiks paziņoti trešām personām, izņemot juridiskus pienākumus.
  5. Datu glabāšana: datu bāze, ko mitina Occentus Networks (ES)
  6. Tiesības: jebkurā laikā varat ierobežot, atjaunot un dzēst savu informāciju.

  1.   izgatavotas bumbiņas teica

    Laba vietne!
    Viņi vienmēr izved mūs no nepatikšanām.

    Kur teikts:
    Lai gan vēl viena alternatīva ir atrast vecāku procesus, jo, lai nogalinātu zombiju procesu, jums ir jānogalina vecāku procesi, kas to atbalsta, kā jūs, iespējams, esat secinājis:

    1 | ps -eo pid, ppid | grep
    2|
    3 | nogalināt -9

    Jums būs jāaizstāj atrastā zombiju procesa ID, un, lai to nogalinātu ar kill, protams, izmantojiet piemērā aizstājošā vecāku procesa ID.

    varat pievienot skriptu:

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

    Protams, tas nav uzdevums, ko parasts lietotājs veic visu laiku.
    Tas būtu noderīgi tikai administratoram, bet ir bīstami palaist to kā root, jo tas var nogalināt jebkuru procesu sistēmā.

    Cilvēka nogalināšanā ir šāda piezīme:

    PIEZĪMES Jūsu apvalkam (komandrindas tulkam) var būt iebūvēta nogalināšanas komanda. Jūs varat
    lai atrisinātu konfliktu, ir jāpalaiž komanda, kas šeit aprakstīta kā / bin / kill.

    Bašam ir šī pavēle, šī ir cilvēka daļa par to:

    nogalināt [-s sigspec | -n signum | -sigspec] [pid | darba specifika] ...
    nogalināt -l | -L [sigspec | izejas_statuss]
    Nosūtiet ar sigspec vai signum nosaukto signālu procesiem, kas nosaukti ar pid vai job
    spec. sigspec ir vai nu reģistrjutīgs signāla nosaukums, piemēram, SIGKILL (ar vai
    bez SIG prefiksa) vai signāla numura; signum ir signāla skaitlis. Ja
    sigspec nav, tad tiek pieņemts SIGTERM. Arguments -l norāda uz
    signālu nosaukumi. Ja tiek sniegti argumenti, kad ir norādīts -l, nosaukumi
    tiek uzskaitīti argumentiem atbilstošie signāli, un atgriešanas statuss ir 0.
    Arguments exit_status uz -l ir skaitlis, kas norāda vai nu signāla numuru, vai
    signāla pārtraukta procesa izejas statuss. Opcija -L ir līdzvērtīga
    aizdeva -l. kill atgriež true, ja ir veiksmīgi nosūtīts vismaz viens signāls, vai
    false, ja rodas kļūda vai tiek konstatēta nederīga opcija.

    Sākumā viņi paskaidro, kā bash aizsargā procesus, lai izvairītos no problēmām, bet man nav skaidrs, kā es varu izveidot drošu skriptu, lai tas darbotos kā root.
    Vienīgais, ko es varu iedomāties, ir aizsargāt to šādi:

    $ kaķis killppid.sh
    #! / bin / bash
    ja [$ USER == "root"]
    tad echo Nepalaidiet $ 0 kā root !!! tas ir bīstami!
    izeja
    fi

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

    $

    Izmantojiet bash's kill, nevis / bin / kill

    Kā jūs redzat, es neesmu pārāk labi pārzinājis bash.
    Vai jūs zināt, kā uzrakstīt drošu skriptu, kas darbojas kā pakārtotā procesa lietotājs, pat ja tas darbojas kā root?
    kaut kas līdzvērtīgs tam, kas tiktu darīts manuāli, piemēram:

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