Operacije nad procesi v o.s. Linux
Da boste lahko sledili snovi v tem poglavju morate
- vedeti kaj je to ukazna lupina
- imeti dostop do računalnika, kjer je linux nameščen (za vajo lahko poženete linux kar iz cd-ja na svojem računalniku - uporabite lahko distribucijo Knoppix)
- se znate prijaviti v sistem
- vedeti kako se procesi zaženejo
- vedeti kaj procesi so
Ukaz ps nam na zaslonu izpiše seznam procesov. Če ga v ukazni lupini poženemo brez parametrov dobimo nekaj podobnega:
PID TTY TIME CMD
19986 pts/0 00:00:00 bash
20014 pts/0 00:00:00 ps
Ukaz nam izpiše podatke o dveh procesih, prvi je lupina v kateri delamo, drugi pa je ukaz ps, ki se je pravkar izvedel. V osnovi se za vsak proces izpiše njegov pid - številka procesa, v stolpcu tty so imena terminalov, s katerih so bili procesi pognani. Za vsak proces se potem izpiše še čas, ki ga je procesor porabil in ukaz.
Več informacij dobimo z uporabo parametra -l (ps -l) npr. informacijo o roditelju procesa (ppid) in prioriteti s katero se proces poganja. Temu stikalu lahko dodamo stikalo -a, ki izpiše tudi procese drugih uporabnikov in -x, ki izpiše procese, ki jih je pognal sam sistem (procesi brez nadzornega terminala). Ukaz bi sedaj napisali takole:
ps -auxl
Preizkusite ukaz s parametrom -u, poiščite razliko med ps -ax in ps -aux.
Kaj izpiše ukaz pstree?
Skrbniki sistemov imajo raje kot brskanje po procesih pregled nad procesi, ki najbolj bremenijo sistem. Zelo priročen je ukaz top, ki nam v realnem času prikazuje seznam najbolj aktivnih procesov. Za vsak proces podaja tudi odstotek uporabljenega pomnilnika in procesorskega časa. Spodaj imamo primer izpisa:
top - 09:50:14 up 19 days, 1:43, 3 users, load average: 0.10, 0.03, 0.01
Tasks: 140 total, 1 running, 139 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni, 99.9%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 3561472k total, 3538512k used, 22960k free, 130092k buffers
Swap: 2104472k total, 224k used, 2104248k free, 2995888k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
25332 root 15 0 1573m 14m 4548 S 0 0.4 45:15.96 qemu-dm
1 root 16 0 780 320 264 S 0 0.0 0:00.96 init
2 root RT 0 0 0 0 S 0 0.0 0:00.06 migration/0
3 root 34 19 0 0 0 S 0 0.0 0:00.00 ksoftirqd/0
4 root RT 0 0 0 0 S 0 0.0 0:00.08 migration/1
5 root 34 19 0 0 0 S 0 0.0 0:00.42 ksoftirqd/1
Ukaz nam poda tudi informacijo o količini uporabljenega fizičnega in navideznega pomnilnika, število vseh procesov itd.
Z uporabo tipkovnice lahko prikaz poljubno priredimo. S pritiskom na tipko u lahko prikažemo samo procese določenega uporabnika, s pritiskom na tipko c se nam izpiše tudi ukaz s katerim je bil proces pognan ipd. Seznam in opis možnosti dobite s pritiskom na tipko h.
Stanje se osvežuje vsako sekundo, iz programa gremo s pritiskom na tipko q.
Kako bi spremenili privzeti interval osveževanja?
Z ukazom nice lahko uravnavamo koliko bo določen proces obremenjeval sistem. Uporaba:
nice -n vrednost_nice ukaz
vrednost_nice lahko zavzema vrednosti od -20 do 19, pri čemer -20 pomeni največje obremenjevanje sistema, vrednost 19 pa pomeni, da bo ukaz dobil najmanj procesorskega časa.
Proces lahko ubijemo na več načinov. Eden od načinov je pritisk na kombinacijo tipk Ctrl + c med samim izvajanjem programa.
Bolj se uporablja ukaz
kill [-sig] pid
kjer je sig ime signala in pid identifikacijska številka procesa. Signalov je več, največ pa se uporabljajo sledeči.
Signal | Učinek | |
1 | SIGHUP | uporablja se za vnovično nastavitev procesov |
2 | SIGINT | enako kot bi pritisnili na Ctrl + c |
9 | SIGKILL | brezpogojno ubijanje - ni je mogoče prekiniti |
15 | SIGTERM | privzeta vrednost pri ukazu kill, uporablja se za milo zaustavljanje procesov |
Z zaustavljanjem starševskega procesa se prenehajo izvajati tudi vsi procesi izpeljani iz tega procesa. Izhod iz lupine ubije praviloma ubije vse procese, ki smo jih zagnali v tej lupini.
Linux pozna tudi ukaz killall. A ta ukaz enostavno ubije vse procese?