Surnud päev on saabumas ja seetõttu tahame teha selle väikese LxA õpetuse, et sellest rääkida zombie protsessid ja kuidas me saame neid tappa. Kõigepealt tuleb öelda, mis on zombiprotsess, ja see on see, et nagu teate, on Linuxi tuumal protsesside haldamiseks alamsüsteem ja ta töötab koos ajastajaga protsessori loomiseks, prioriteedi muutmiseks, protsessori voo saatmiseks või eemaldamiseks ning tappa protsesse. Noh, see tuuma osa, nagu ka ülejäänud Unixi-laadsed süsteemid, eristab erinevaid protsesside olekuid ...
Nii et võime selle leida protsess see võib olla magavas (S) olekus, see tähendab magada. Samuti töötavad töötavas olekus (R) olevad protsessid, mis praegu töötavad või töötavad, protsessid, mis ootavad (D), mis on osalemise ootamise peatatud, gestpt (T) või peatatud, samuti zombid (Z) või surnud. Zombie või surnud protsess on protsess, mis on juba edukalt lõpetatud, kuid millel on kaaperdatud teatud süsteemiressursid, kuna Linux salvestab seda endiselt protsessitabelisse. Te juba teate, et kui protsess lõpeb, ei tohiks see jääda sellesse olekusse, kuid see lõpeb ja tuum vabastab ressursid, et muud protsessid saaksid neid kasutada, põhimõtteliselt vabastab see hõivatud RAM-i ...
Noh, kuna seda tüüpi zombiprotsesside pakkumine pole huvitav, kuigi need pole nii sagedased, võime neid otsida ja kõrvaldada, nagu siin näidatud. Esimene asi on leida, kas meie distros on zombiprotsesse ja selle jaoks saame end aidata tööriistad nagu top või nagu ps. Näiteks üks neist kahest võimalusest:
ps -el | grep 'Z' ps aux | grep defunct
Ja kui see on avastatud, saame tappa ta otse koos:
kill -HUP `ps -A -ostat,ppid,pid,cmd | grep -e ‘^[Zz]’ | awk ‘{print $2}’`
Ehkki teine alternatiiv on leida vanemaprotsessid, alates sellest tappa zombie protsess Peate tapma vanemprotsessid, mis seda toetavad, nagu võisite järeldada:
ps -eo pid,ppid | grep <PID> kill -9 <PPID>
Peate asendama leitud zombiprotsessi ID järgi ja tapmiseks tapmisega kasutage vanemprotsessi ID-d näites ilmselgelt.
Hea sait!
Nad aitavad meid alati hädast välja.
Kus öeldakse:
Ehkki teine alternatiiv on vanemate protsesside leidmine, peate zombiprotsessi tapmiseks tapma seda toetavad vanemprotsessid, nagu olete võib-olla järeldanud:
1 | ps -eo pid, ppid | grep
2|
3 | tappa -9
Peate leitud zombieprotsessi ID asendama ja selle tapmiseks killuga kasutage loomulikult näites asendava vanemprotsessi ID-d.
saate lisada skripti:
$ kass killppid.sh
#! / bin / bash
kill -9 $ (ps -eo pid, ppid | awk '$ 1 ==' $ {1} '{print $ 2}')
Loomulikult ei ole see ülesanne, mida tavaline kasutaja kogu aeg täidab.
See oleks kasulik ainult administraatorile, kuid seda on ohtlik käivitada administraatorina, kuna see võib tappa kõik süsteemis olevad protsessid.
Inimese tapmise puhul on sellel järgmine märge:
MÄRKUSED Teie shellil (käsurea tõlgendajal) võib olla sisseehitatud killikäsk. Sa võid
konflikti lahendamiseks peate käivitama käsu, mida on kirjeldatud siin kui / bin / kill.
Bashil on see käsk, see on mehe osa sellest:
tappa [-s sigspec | -n-märk | -sigspec] [pid | töö spetsifikatsioon] ...
kill -l | -L [sigspec | väljumise_olek]
Saada sigspeci või signumi nimega signaal protsessidele, mille nimi on pid või töö
spec. sigspec on kas tõstutundlik signaalinimi, näiteks SIGKILL (koos või
ilma SIG-eesliiteta) või signaali number; signum on signaali number. Kui
sigspec puudub, siis eeldatakse SIGTERM. Argument -l loetleb
signaali nimed. Kui -l on antud argumente, siis the nimed
argumentidele vastavad signaalid on loetletud ja tagastamise olek on 0.
Argument exit_status väärtusele -l on arv, mis määrab kas signaali numbri või
signaaliga lõpetatud protsessi väljumise olek. Valik -L on samaväärne
laenatud -l. kill tagastab tõene, kui vähemalt üks signaal saadeti edukalt või
väär, kui ilmneb viga või ilmneb kehtetu valik.
Alguses selgitatakse, kuidas bash protsesse kaitseb, et vältida mõningaid probleeme, kuid mulle pole selge, kuidas saaksin teha turvalise skripti, mis töötaks administraatorina.
Ainus, millele ma mõtlen, on kaitsta seda järgmiselt:
$ kass killppid.sh
#! / bin / bash
kui [$ USER == "root"]
siis echo Ära kasuta $ 0 root kasutajana !!! see on ohtlik!
väljumiseks
fi
kill -9 $ (ps -eo pid, ppid | awk '$ 1 ==' $ {1} '{print $ 2}')
$
Kasutage bash's kill, mitte / bin / kill
Kuidas sa näed, et ma pole bashis kuigi hästi kursis.
Kas teate, kuidas kirjutada turvalist skripti, mis töötab alamprotsessi kasutajana, isegi kui see töötab administraatorina?
midagi samaväärset sellega, mida tehakse käsitsi järgmiselt:
$ su;
$ kill -9 $ (ps -eo pid, ppid | awk '$ 1 ==' $ {1} '{print $ 2}')