Ateina mirusiųjų diena, todėl norime pakalbėti apie „LxA“ šią mažą pamoką zombių procesai ir kaip mes galime juos nužudyti. Pirmiausia reikia pasakyti, kas yra zombių procesas, ir tai yra tai, kad, kaip žinote, „Linux“ branduolys turi posistemį procesams valdyti ir dirba su tvarkaraščiu kurdamas, keisdamas prioritetą, siunčiant ar pašalinant procesoriaus apdorojimo srautą ir nužudyti procesus. Na, ši branduolio dalis, kaip ir visos „Unix“ tipo sistemos, išskiria įvairias procesų būsenas ...
Taigi mes galime tai rasti procesas jis gali būti miego (S) būsenoje, tai yra miegoti. Taip pat procesai veikiančioje būsenoje (R) yra tie, kurie šiuo metu veikia arba veikia, laukiantys procesai (D), kurie nustojo laukti, kol bus laukiami, gestpt (T) arba sustabdyti, taip pat zombiai (Z) arba mirę. Zombis arba negyvas procesas yra tas, kuris jau sėkmingai nutrauktas, tačiau užgrobti tam tikri sistemos ištekliai, nes „Linux“ vis dar jį saugo procesų lentelėje. Jūs jau žinote, kad pasibaigus procesui, jis neturėtų likti šioje būsenoje, bet užbaigtas, o branduolys išlaisvina išteklius, kad kiti procesai galėtų juos naudoti, iš esmės tai atlaisvina užimtą RAM ...
Na, kadangi neįdomu turėti tokio tipo zombių procesus, nors jie ir nėra tokie dažni, galime jų ieškoti ir pašalinti, kaip nurodyta čia. Pirmas dalykas yra išsiaiškinti, ar mūsų zonde vyksta zombių procesai ir tam galime padėti patys įrankiai, pavyzdžiui, viršuje arba kaip ps. Pavyzdžiui, viena iš šių dviejų parinkčių:
ps -el | grep 'Z' ps aux | grep defunct
O kai tik aptiksime, galėsime Nužudyk jį tiesiogiai su:
kill -HUP `ps -A -ostat,ppid,pid,cmd | grep -e ‘^[Zz]’ | awk ‘{print $2}’`
Nors kita alternatyva yra surasti pirminius procesus, nuo to nužudyti zombių procesą Jūs turite nužudyti tėvų procesus, kurie tai palaiko, kaip jūs galėjote padaryti išvadą:
ps -eo pid,ppid | grep <PID> kill -9 <PPID>
Teks pakeisti pagal surasto zombio proceso ID ir nužudyti jį nužudymu, naudokite pirminio proceso ID pavyzdyje akivaizdu.
Gera svetainė!
Jie visada mus išmuš iš bėdų.
Kur sakoma:
Nors kita alternatyva yra rasti pirminius procesus, nes norėdami nužudyti zombių procesą, turite nužudyti jį palaikančius pirminius procesus, kaip galėjote padaryti išvadą:
1 | ps -eo pid, ppid | grep
2|
3 | nužudyti -9
Turėsite pakeisti rasto zombio proceso ID, o norėdami jį nužudyti, naudokite pavyzdyje pakeičiančio pagrindinio proceso ID.
galite pridėti scenarijų:
$ katė killppid.sh
#! / bin / bash
nužudyti -9 $ (ps -eo pid, ppid | awk '$ 1 ==' $ {1} '{spausdinti $ 2}')
Žinoma, tai nėra užduotis, kurią įprastas vartotojas atlieka nuolat.
Tai būtų naudinga tik administratoriui, bet pavojinga paleisti kaip root, nes tai gali užmušti bet kurį procesą sistemoje.
Žmogaus nužudyme yra tokia pastaba:
PASTABOS Jūsų apvalkalas (komandų eilutės interpretatorius) gali turėti įmontuotą žudymo komandą. Tu gali
Norėdami išspręsti konfliktą, turite paleisti komandą, aprašytą čia kaip / bin / kill.
Bašas turi tokią komandą, štai tokia žmogaus dalis apie tai:
nužudyti [-s sigspec | -n signum | -sigspec] [pid | darbo specifika] ...
nužudyti -l | -L [sigspec | išėjimo_būsena]
Siųskite signalą, pavadintą sigspec arba signum, į procesus, pavadintus pid arba job
spec. sigspec yra didžiosios ir mažosios raidės nejautrus signalo pavadinimas, pvz., SIGKILL (su arba
be SIG priešdėlio) arba signalo numerio; signum yra signalo skaičius. Jeigu
sigspec nėra, tada daroma prielaida, kad SIGTERM. Argumente -l išvardijami
signalų pavadinimai. Jei pateikiami argumentai, kai pateikiamas -l, pavadinimai
pateikiami argumentus atitinkantys signalai, o grąžinimo būsena yra 0.
Argumentas exit_status į -l yra skaičius, nurodantis signalo numerį arba
signalu užbaigto proceso išėjimo būsena. Parinktis -L yra lygiavertė
paskolino -l. kill grąžina true, jei bent vienas signalas buvo sėkmingai išsiųstas, arba
false, jei įvyksta klaida arba aptinkama netinkama parinktis.
Pradžioje jie paaiškina, kaip bash apsaugo procesus, kad būtų išvengta problemų, bet man neaišku, kaip aš galėčiau sukurti saugų scenarijų, kuris veiktų kaip root.
Vienintelis dalykas, apie kurį galiu galvoti, yra apsaugoti jį taip:
$ katė killppid.sh
#! / bin / bash
jei [$ USER == "root"]
tada echo Nenaudokite $ 0 kaip root !!! tai pavojinga!
išeiti
fi
nužudyti -9 $ (ps -eo pid, ppid | awk '$ 1 ==' $ {1} '{spausdinti $ 2}')
$
Naudokite bash's kill, o ne / bin / kill
Kaip matai, aš nelabai išmanau bash.
Ar žinote, kaip parašyti saugų scenarijų, kuris veikia kaip antrinio proceso vartotojas, net jei jis veikia kaip root?
kažkas panašaus į tai, kas būtų daroma rankiniu būdu, pavyzdžiui:
$ su;
$ kill -9 $ (ps -eo pid, ppid | awk '$ 1 ==' $ {1} '{spausdinti $ 2}')