|
ot kill_u(24-03-2007)
reiting (23)
[ dobre ]
[ zle ]
Variant za otpechatvane Tazi statiia e prevod ot ruski ezik, orignala se namira
tuk
http://www.prolinux.ru/introduction/abo...
V zhivota na obiknoveniia GNU/Linuks potrebitel chesto se
sreshta termina «protsesi». Taka che kakvo tochno e
«protses»? SHTe opitame da razberem.
Suhata formulirovka ni govori, che protses – e suvkupnost ot
programen kod i danni zaredeni v pametta na IBM. Na pruv
pogled protses – tova e startirana programa(prilozhenie) ili
komanda. No tova ne e suvsem taka – niakoi prilozheniia
mogat da suzdavat niakolko protsesa ednovremenno naprimer.
Ne e zadulzhitelno koda na protsesa da se izpulniava v
momenta, tui kato protsesa mozhe da se namira v zaspalo
sustoianie. V tozi sluchai izpulnenieto na koda na takuv
protses e spriano. Sushtestvuvat vsichko na vsichko 3 (tri)
sustoianiia, v koito mozhe da se namira protsesa:
Rabotesht protses – v dadeniia moment koda se izpulniava.
Spiasht protses – v dadeniia moment, koda na protsesa ne se
izpulniava i ochakva niakakvo subitie(naprimer natiskane na
klavish, vhod na danni ili drugi).
Protses-zombi – samiia protses na sushtestvuva, negovite danni
sa premahnati ot operativnata pamet no zapisa v tablitsata na
protsesite ostava poradi razlichni prichini.
Vseki protses v sistemata se oboznachava s tsifrov
identifikator (lichen nomer PID) v diapazona ot 1 do
65535(PID – Process Identifier – identifikator na protsesa) i
identifikator na roditelskiia protses (PPID – Parent Process
Identifier – identifikator na roditelskiia protses). PID
se iaviava imeto na protsesa, po koito mozhem da adresirame
protsesa v operatsionnata sistema pri izpolzvaneto na razlichni
sredstva za preglezhdane i upravlenie na protsesite. PPID
opredelia rodstvenite otnosheniia mezhdu protsesite, koito v
znachitelna stepen opredeliat negovite svoistva i vuzmozhnosti.
Drugite parametri, koito sa neobhodimi za rabota na
programata se narichat”obkruzhenie na protsesa”. Edin ot tezi
se iaviava upravliavashtiia terminal – ime na terminalnoto
ustroistvo na koeto protsesa izvezhda informatsiia i ot kudeto
poluchava informatsiia. Upravliavashtiia terminal ne upravliava
obache vsichki protsesi. Sushtestvuvat takiva, koito ne sa
privurzani kum nikoi terminal i se narichat “demoni”
(daemons). Takiva protsesi sa startirani ot potrebitelia i ne
zavurshvat svoiata rabota pri zavurshvane na seansa, a
produlzhavat da rabotiat, tui kato te ne sa svurzani s tekushtiia
seans i ne mogat da budat avtomatichno zavursheni. Kato
pravilo, s pomoshtta na demonite se realizirat survurnite
sluzhbi kato naprimer survura za pechat e realiziran na
demona cupsd, a survura za zhurnalnite failove –
syslogd.
Za razglezhdane spisuka na protsesi v GNU/Linuks sushtestvuva
komanda ps. Formata i e sledniia:
ps [PID] [options] –
preglezhda spisuka na protsesi. Bez parametri ps pokazva
vsichki protsesi, koito sa bili startirani v techenie na
tekushtata sesiia, s izklyuchenie na demonite. Options mozhe da
priema edno ot slednite znacheniia ili tehnite kombinatsii:
-a ili -e – pokazva vsichki protsesi
-f – pulen listing
-w – pokazva pulnite redove opisvashti protsesite. Ako
redovete sa po dulgi ot shirochinata na ekrana, prenasia reda v
sledvashtiia red.
Tova ne sa vsichkite parametri na ps. Ostanalite mozhe da
razberete chrez man ps.
Primer1:
[gserg@WEBMEDIA gserg]$ ps
PID TTY TIME CMD
3126 pts/2 00:00:00 bash
3158 pts/2 00:00:00 ps
[gserg@WEBMEDIA gserg]$_
Primer2:
[gserg@WEBMEDIA gserg]$ ps 3126
PID TTY STAT TIME COMMAND
3126 pts/2 S 0:00 /bin/bash
[gserg@WEBMEDIA gserg]$_
Primer3:
[gserg@WEBMEDIA gserg]$ ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 10:01 ? 00:00:03 init [5]
root 2 1 0 10:01 ? 00:00:00 [keventd]
root 3 1 0 10:01 ? 00:00:00 [kapmd]
root 4 1 0 10:01 ? 00:00:00 [ksoftirqd_CPU0]
root 5 1 0 10:01 ? 00:00:24 [kswapd]
root 6 1 0 10:01 ? 00:00:00 [bdflush]
…
gserg 3126 3124 0 17:56 pts/2 00:00:00 /bin/bash
gserg 3160 3126 0 17:59 pts/2 00:00:00 ps -ef
[gserg@WEBMEDIA gserg]$_
Primer4:
[gserg@WEBMEDIA gserg]$ ps -efw
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 10:01 ? 00:00:03 init [5]
root 2 1 0 10:01 ? 00:00:00 [keventd]
root 3 1 0 10:01 ? 00:00:00 [kapmd]
root 4 1 0 10:01 ? 00:00:00 [ksoftirqd_CPU0]
root 5 1 0 10:01 ? 00:00:24 [kswapd]
……
root 1130 1 0 10:02 ? 00:00:00 /usr/sbin/apmd -p 10 -w 5 -W
-P /etc/sysconfig/apm-scripts/apmd_proxy
gserg 3172 3126 0 18:01 pts/2 00:00:00 ps -efw
[gserg@WEBMEDIA gserg]$_
Protsesite v GNU/Linuks pritezhavat sushtite prava kakto i
potrebitelite, koito gi izpulniavat..
V kraina smetka operatsionnata sistema vuzpriema raboteshtite
potrebiteli kato nabor ot startirani ot nego protsesi. Taka i
samiia seans se otkriva v komanden red (ili H obvivka) ot
imeto na potrebitelia. Zatova kogato govorim za „prava na
dostup za faila” to triabva da se razbira „prava na dostup na
startiranite ot potrebitelia protsesi kum faila”.
Za opredeliane imeto na potrebitelia, na zaspivashtiia protses
operatsionnata sistema izpolzva realni identifikatori na
potrebitelia i grupite, naznachavashti protsesa. No tezi
identifikatori ne se iaviavat reshavashti pri opredeliane pravata
na dostup. Za tova pri vseki protses sushtestvuvat grupa
identifikatori narecheni - efektivni..
Kak pravilo, realnite i efektivnite indikatori na
protsesite sa ednakvi, no ima i izklyucheniia. Naprimer, za
rabotata na instrumenta passwd e neobhodimo da se izpolzva
identifikator za super potrebitel, tui kato samo super
potrebitelia ima pravo da zapisva vuv faila s paroli. V tozi
sluchai efektivnite identifikatori na protsesa shte se otlichavat
ot realnite. Vuznikva rezonniia vupros – kak e realizirano
tova?
Vseki fail ima nabor ot spetsialni praza za dostup – bitove
SUID i SGID. Tezi bitove pozvoliavat pri startiraneto na
programata da i budat prisvoeni efektivni identifikatori na
potrebitelia i na grupata na potrebitelia suotvetno i da se
izpulniava protses s prava na dostup s drug potrebitel. Taka
kakto passwd prinadlezhi na root potrebitelia i toi e s
nastroen bit SUID, to pri startiraneto na protsesa passwd shte
bude s prava na root.
Ustanoviavane na SGID i SUID chrez komandata chmod:
chmod u+s filename – zadava bita SUID
chmod u+s filename – zadava bita SGID
Do tuk razgledahme poniatieto protses, nachini za izobraziavane
na protsesa i prava na dostup. No za komfortnata rabota v
operatsionnata sistema, tova e naistina malko. Neobhodimo e
oshte efektivno da se upravliavat protsesite. A za realizatsiiata
na upravlenieto triabva da pregledame kato nachalo tablitsata
na protsesite:
Roditel na vsichki protsesi v sistemata e protsesa init.
Negoviia PID vinagi e 1, PPID – 0. TSialata tablitsa na
protsesite mozhe da se predstavi vuv vid na durvo, v chiiato
osnova shte bude protsesa init. Tozi protses ne e chast ot
iadroto, no izpulniava mnogo vazhna rolia – opredelia tekushtoto
ravnishte na initsializatsiia na sistemata i sledi za startirani
programi, pozvoliavashti na potrebitelia da raboti s kompyutura
(mingetty, X ili drugi).
Protsesi, imenata na koito zapochvat v kvadratni skobi –
naprimer “[keventd]” – sa protsesi na iadroto. Tezi protsesi
upravliavat rabotata na sistemata i po-tochno neinite chasti,
kato menidzhura na pametta, menidzhura na portsesornite
vremena, menidzhura na vunshnite ustroistva i taka
natatuk.
Ostanalite protsesi, se iaviavat potrebitelski, startirani
obiknoveno ot konzolen red, ili puk po vreme na
initsializatsiiata na sistemata.
ZHivota na vseki protses e predstaven sus slednite frazi:
Suzdavane – na tozi etap se suzdava pulno kopie na tozi
protses, koito suzdava nov. Naprimer, startirate ot
interpretatora komandata ls. Komandniia interpretator suzdava
svoe sobstveno pulno kopie na tazi komanda.
Zarezhdane koda na protsesa i podgotovka kum startirane –
kopieto na suzdadenata programa na purviia etap, zamenia koda
na zadachata, koiato e neobhodimo da izpulni i suzdava neinoto
obkruzhenie – ustanoviava neobhodimite promenlivi i t.n.
Izpulnenie na protsesa
Sustoianie zombi – na tozi etap ot izpulnenieto, protsesa e
zavurshen, koda e iztrit ot pametta, obkruzhenieto se
unishtozhava no zapisa v tablitsata na protsesite oshte stoi.
Umirane na protsesa – sled vsichki zavurshvashti stadii se
iztriva zapisa v tablitsata na protsesite i samiia protses
zavurshva svoiata rabota.
Po vreme na rabotata na protsesite, iadroto kontrolira
tiahnoto sustoianie i v sluchai na vuznikvane na nepredvideni
situatsii upravliava protsesa s pomoshtta na izprashtane na signal.
Signal – tova e prost mezhdu protsesoren sposob(ima se predvid
mezhdu protsesite) za vzaimodeistvie. Sushtestvuvat niakolko tipa
signali. Za vseki ot tipovete e predvideno deistvie po
podrazbirane. Protsesa mozhe da se izpolzva deistvieto po
podrazbirane ili ako v nego ima obrabotvasht signala modul to
toi mozhe da go prihvane i obraboti ili ignorira. Signalite
SIGKILL i SIGSTOP e nevuzmozhno da se ignorirat.
Po podrazbirane sa vuzmozhni niakolko deistviia:
Ignorirane – produlzhava rabotata, vupreki polucheniia
signal.
Zavurshvane – protsesa spira rabota.
Zavurshvane + core – zavurshva rabotata na protsesa i suzdava
fail v tekushtata direktoriia, sudurzhasht obraza na protsesa ot
pametta (kod i danni).
Spirane – preustanoviava izpulnenieto na protsesa no ne spira
rabotata mu i ne go iztriva ot pametta.
Eto spisuk sus signalite, sushtestvuvashti v sistemata kum
momenta:
Ime
Deistvie po podrazbirane
Znachenie
SIGABRT
Zavurshva + core
Signal se izprashta ako samiia protses izvikva
abort()
SIGTERM
Zavurshva
Signala obiknoveno predstavliava svoego roda
preduprezhdenie, che protsesa v nai-skoro vreme shte bude
unishtozhen. Tozi signal pozvoliava na protsesa edin vid da
se „podgotvi za smurtta” t.e. da iztrie vremennite failove,
zavurshi neobhodimite prehvurlianiia i t.n. Komandata kill po
podrazbirane izprashta imenno tozi signal .
SIGTTIN
Spira
Signala se generira ot iadroto(draiverite na upravliavashtiia
terminal), pri izvikvane na protsesa, fonova grupa
osushtestviava chetene ot upravliavashtiia terminal.
SIGTTOU
Spira
Signala se generira ot iadroto (draiverite na terminala)
pri izvikvane na protsesa fonova grupa osushtestviava zapis na
upravliavashtiia terminal.
SIGALRM
Zavurshva
Signala se izprashta, kogato e zadaden po-rano taimer.
SIGBUS
Zavurshva + core
Signala svidetelstva za niakoi aparatni greshki. Obiknoveno
tozi signal se izprashta pri obrushteniia kum nedopustim adres
vuv virtualnata pamet, za koito lipsva suotvetna fizicheska
stranitsa.
SIGCHLD
Ignorira
Signal, izprashtan ot roditelskiia protses pri zavurshvane na
negoviia potomuk.
SIGSEGV
Zavurshva + core
Signala svidetelstva za obrushtenie na protsesa kum
nedopustima oblast v pametta, za koiato v protsesa niama
privilegii za dostup.
SIGFPE
Zavurshva + core
Signala svidetelstva za vuznikvane na osobena situatsiia,
kato delenie na 0 ili izpulniavane na operatsii s
plavashta tochka.
SIGHUP
Zavurshva
Signala se izprashta kum lidera na seansa, svurzan s
upravliavashtiia terminal, za tova che terminala se e izklyuchil
(propadane na vruzkata). Signala sushto mozhe da bude izpraten
do vsichki protsesi v tekushtata grupa pri zavurshvaneto na
izpulnenieto ot lidera.
Tozi signal poniakoga izpolzva v kachestvoto na prosto
sredstvo mezhduprotsesnoto vzaimodeistvie. V chastnost, toi se
priema za suobshtenie demon za neobhodimostta ot obnoviavane na
konfiguratsionnata informatsiia. Prichina za izbor imenno na
tozi signal – SIGHUP , e che demona po printsip niama
upravliavasht terminal i obiknoveno ne poluchava tozi
signal.
SIGILL
Zavurshva + core
Signala se izprashta ot iadroto, ako protsesa se opita da
izpulni nedopustima instruktsiia.
SIGINT
Zavurshva
Signala se izprashta ot iadroto do vsichki protsesi pri
natiskane na klavisha (<CTRL>+<C>)
SIGKILL
Zavurshva
Signal, pri poluchavaneto pri poluchavaneto na koito
izpulnenieto na protsesa se prekratiava. Tozi signal ne
mozhe da se prihvane i ignorira.
SIGPIPE
Zavurshva
Signala se izprashta pri opit za zapis v soket, poluchatelia
na danni na koito e zavurshil izpulnenieto ili e zakril
failoviia ukazatel na soketa.
SIGPOLL
Zavurshva
Signala se izprashta pri nastupvane na opredeleno subitie za
ustroistvoto, koeto se iaviava otgovorno(naprimer poluchavane
na paket po mrezhata).
SIGPWR
Ignorirane
Signala se generira pri zaplaha ot zaguba na
zahranvane. Obiknoveno se izprashta, kogato
sistemata se prevklyuchva na UPS.
SIGQUIT
Zavurshva
Signala se izprashta kum vsichki protsesi ot tekushtata grupa
pri natiskane na klavish <CTRL>+<\>.
SIGSTOP
Spira
Signala se izprashta do vsichki protsesi v tekushtata grupa pri
natiskane na klavishi <CTRL>+<Z>. Poluchavaneto na
tozi signal izvikva spirane na protsesa.
SIGSYS
Zavurshva + core
Signala se izprashta ot iadroto pri opit da se izpulni protses
s nedopustim sistemen signal.
SIGUSR1
Zavurshva
Signala e prednaznachen za dopulnitelni zadachi kato prosto
sredstvo za mezhduprotsesno vzaimodeistvie.
SIGUSR2
Zavurshva
Signala e prednaznachen za dopulnitelni zadachi kato prosto
sredstvo za mezhduprotsesno vzaimodeistvie.
Nemalovazhna rolia v zhivota na protsesite igrae menidzhura na
protsesite – tova e chast ot iadroto, otgovariashta za
mnogozadachnostta na sistemata. Qsno e che za edinitsa vreme v
edin protsesor mozhe da se izpulniava samo edin protses. Imenno
tozi menidzhur opredelia, koi ot startiranite protsesi purvi da
se izpulniava i koi vtori. Za da mozhem da vidim tozi
prioritet na protsesite triabva da izpulnim ps s optsiia –
l(long – razshiren izhod):
[gserg@WebMedia gserg]$ ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 500 1554 1553 0 75 0 - 1135 wait4 pts/1 00:00:00
bash
0 R 500 1648 1554 0 81 0 - 794 - pts/1 00:00:00 ps
[gserg@WebMedia gserg]$
Po vreme na svoiata rabota menidzhura na protsesi v nachaloto
postavia za izpulnenie protsesi s nisuk prioritet. Taka
prioritet 0 e zaet samo za kritichnite sistemni zadachi, a
otritsatelniia prioritet za protsesi na iadroto. Zadachi s goliam
prioritet iziskvat malko protsesorno vreme i zatova kato
pravilo rabotiat bavno i gubiat malko sistemni resursi.
Ostava samo da reshim vuprosa, mozhe li potrebitelia da
upravliava protsesite i sistemnite parametri ? Estestveno, che
mozhe! Za tova v GNU/Linuks ima nabor ot instrumenti
pozvoliavashti promiana prioriteta na protsesa, chrez izprashtane na
signal. Za tiah stava vupros po-dolu.
Purviia instrument – komandata nice:
nice -n command – pozvoliava da se promeni prioriteta, s
koito shte se izpulniava protsesa sled startiraneto. Bez
ukazaniia komandata dava tekushtiia prioritet na protsesa i po
podrazbirane toi e raven na 10. Diapazona na prioritetite e
razpolozhen ot -20(nai – starshi ) do 19(nai – nizsh). Primer e
pokazan po – dolu:
[gserg@WebMedia gserg]$ less .bashrc &
[1] 3070
[gserg@WebMedia gserg]$ ps -efl | grep less
0 T gserg 3070 3018 0 80 0 - 1004 finish 17:56 pts/3
00:00:00 less .bashrc
[gserg@WebMedia gserg]$ nice -n 20 less .bashrc &
[1] 3081
[gserg@WebMedia gserg]$ ps -efl | grep less
0 T gserg 3081 3018 0 99 19 - 1003 finish 18:01 pts/3
00:00:00 less .bashrc
Sravniavaiki tsifrite na prioriteta, otbeliazvame che komandata
less v purviia sluchai se e izpulniavala s prioritet 80, a vuv
vtoriia – 99. V takuv smisul komandata nice i svurshila svoiata
zadacha – ponizhila e prioriteta na zadachata. Nuzhno e da se
otbelezhat samo niakoi osobenosti pri izpulnenie na nice.
Purvo komandata ponizhava prioriteta kolkoto e
vuzmozhno(naprimer 19 vmesto 20). Vtoro – da povishava
prioriteta na zadachata mozhe samo root.
Oshte edna komanda:
nohup command – pozvoliava na protsesa da produlzhi
izpulnenieto dazhe pri zaguba na upravliavasht terminal
(SIGHUP). Tazi komanda e izgodno da se izpolzva kogato e
neobhodimo da se izpulni produlzhitelno deistvie. Mozhete da ia
startirate i zatvariata terminalniia seans, a tia pri tova shte
produlzhava da se izpulniava. Izhoda ot komandata se sudurzha
vuv fail v tekushtata direktoriia.
Nai chesto izpolzvanata komanda v sluchaia mozhe da se kazhe, che
e kill:
kill -SIGNAL pid – izprashta signal do protsesa s
identifikator pid. Ako signala ne e ukazan, komandata
izprashta na protsesa signal SIGTERM. Eto primer za
izpolzvaneto i:
[gserg@WebMedia gserg]$ less &
[1] 1352
[gserg@WebMedia gserg]$ ps
PID TTY TIME CMD
1322 pts/2 00:00:00 bash
1352 pts/2 00:00:00 less
1353 pts/2 00:00:00 ps
[gserg@WebMedia gserg]$ kill -SIGKILL 1352
[gserg@WebMedia gserg]$ ps
PID TTY TIME CMD
1322 pts/2 00:00:00 bash
1355 pts/2 00:00:00 ps
[1]+ Killed less
Ne tolkova populiarna kato kill e komandata killall:
killall -s SIGNAL protses – izprashta signal do vsichki protsesi
sus zadadenoto ime. Ako ne e zadaden signal to se izprashta
SIGTERM.
Signala za tazi komanda, triabva da se ukazva bez
predstavkata SIG. Za poluchavane na otgovor v tsifrov vid i
imeto na signala se izpolzva optsiiata -l na komandata
killall. Eto primer za izpolzvaneto i:
[gserg@WebMedia gserg]$ less ./.bashrc&
[1] 1374
[gserg@WebMedia gserg]$ less ./.bashrc&
[2] 1375
[1]+ Stopped less ./.bashrc
[gserg@WebMedia gserg]$ less ./.bashrc&
[3] 1376
[2]+ Stopped less ./.bashrc
[gserg@WebMedia gserg]$ ps
PID TTY TIME CMD
1322 pts/2 00:00:00 bash
1374 pts/2 00:00:00 less
1375 pts/2 00:00:00 less
1376 pts/2 00:00:00 less
1377 pts/2 00:00:00 ps
[3]+ Stopped less ./.bashrc
[gserg@WebMedia gserg]$ killall -s KILL less
[1] Killed less ./.bashrc
[2]- Killed less ./.bashrc
[3]+ Killed less ./.bashrc
[gserg@WebMedia gserg]$
Literatura:
1. Robachevskii A.M. «Operatsionnaia sistema Unix®». –
SPb.:BVH – Sankt-Peterburg, 1999. – 528 s., il.
2. Sistemnaia spravochnaia sluzhba Linux Man
<< Adaptivna zashtitna stena | Instalirane na Squid s autorizatsiia (ncsa) >>
|
|