Operacije nad procesi v o.s. Linux

IDevice Icon Predznanje

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 

iDevice icon Seznam procesov - ps

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?

iDevice icon Poraba procesorskega časa - top

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?

iDevice icon Sprememba prioritete procesa

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.


iDevice icon Ubijanje procesov - kill

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 
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?