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.
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}')