ot kill_u(24-03-2007)

reiting (23)   [ dobre ]  [ zle ]

Printer Friendly 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) >>