Anketa

Ktorý návod by ste cheli ako ďalší?:

Partenské projekty

FreeBSD - Procesy

Verzia pre tlačSend by emailPDF verzia

FreeBSD je viacúlohový operačný systém. To znamená, že to vyzerá ako keby v ňom bolo spustených viacero programov naraz. Každý program bežiaci v určitý čas sa nazýva proces. Každý príkaz, ktorý spustíme má aspoň jeden proces a existuje tiež množstvo systémových procesov, ktoré bežia neustále a udržiavajú systém funkčný.

Každý proces je jednoznačne identifikovaný pomocou svojho čísla, ktoré nazývame identifikátor procesu alebo pomocou skratky PID a podobne ako u súborov, má každý proces svojho vlastníka a skupinu. Informácia o vlastníkovi a skupine sa používa na určenie toho, ktoré súbory a zariadenia môže proces otvárať, pričom sa použijú oprávnenia, o ktorých sme hovorili v predchádzajúcich častiach. Väčšina procesov má tiež rodičovský proces. Rodičovský proces je proces, ktorý ho spustil. Ak napríklad zadáme príkazy do systémového prostredia shell, potom dané prostredie shell je proces a aj spustené príkazy sú procesy. Každý proces, ktorý takýmto spôsobom spustíme, bude mať shell ako rodičovský proces. Výnimkou je špeciálny proces nazývaný init(8). init je vždy prvý proces, takže jeho PID má vždy hodnotu 1. init sa spúšťa automaticky pri spustení jadra FreeBSD.

Na zobrazenie procesov v systéme sú obzvlášť užitočné dva príkazy ps(1)top(1). Príkaze ps sa používa na zobrazenie statického zoznamu práve bežiacich procesov, a môže zobraziť ich PID, veľkosť pamäte, ktorú využívajú, príkaz, ktorým boli spustené a tak ďalej. Príkaz top zobrazuje všetky bežiace procesy a aktualizuje zobrazenie po niekoľkých sekundách, takže môžeme interaktívne sledovať, čo počítač robí.

V predvolenom stave nám príkaz ps ukáže iba príkazy, ktoré sme spustili a vlastníme my. Napríklad:

% ps
  PID  TT  STAT      TIME COMMAND
  298  p0  Ss     0:01.10 tcsh
 7078  p0  S      2:40.88 xemacs mdoc.xsl (xemacs-21.1.14)
37393  p0  I      0:03.11 xemacs freebsd.dsl (xemacs-21.1.14)
48630  p0  S      2:50.89 /usr/local/lib/netscape-linux/navigator-linux-4.77.bi
48730  p0  IW     0:00.00 (dns helper) (navigator-linux-)
72210  p0  R+     0:00.00 ps
  390  p1  Is     0:01.14 tcsh
 7059  p2  Is+    1:36.18 /usr/local/bin/mutt -y
 6688  p3  IWs    0:00.00 tcsh
10735  p4  IWs    0:00.00 tcsh
20256  p5  IWs    0:00.00 tcsh
  262  v0  IWs    0:00.00 -tcsh (tcsh)
  270  v0  IW+    0:00.00 /bin/sh /usr/X11R6/bin/startx -- -bpp 16
  280  v0  IW+    0:00.00 xinit /home/nik/.xinitrc -- -bpp 16
  284  v0  IW     0:00.00 /bin/sh /home/nik/.xinitrc
  285  v0  S      0:38.45 /usr/X11R6/bin/sawfish

Ako môžeme vidieť v tomto príklade, výstup príkazu ps(1) je usporiadaný do niekoľkých stĺpcov. PID je identifikátor procesu, o ktorom sme hovorili. PID môže nadobúdať hodnoty od 1 až po 99999 a po vyčerpaní rozsahu, sa nadviaže od začiatku (identifikátory sa neprideľujú znova ak už boli použité). Stĺpec TT zobrazuje konzolu, z ktorej bol program spustený a momentálne si ho nemusíme všímať. Stĺpec STAT zobrazuje stav programu a teraz si ho tiež nemusíme všímať. V stĺpci TIME je uvedený celkový čas využívania procesora (tento čas je zvyčajne iný ako čas ktorý, uplynul od spustenia programu, pretože programy strávia dlhú dobu čakaním na určité udalosti, ktoré potrebujú ku svojej činnosti). V poslednom stĺpci COMMAND sa nachádza príkaz, ktorý bol použitý na spustenie programu.

Príkaz ps(1) podporuje mnoho rôznych volieb, ktorými sa dajú meniť informácie, ktoré bude zobrazovať. Jedna z najužitočnejších volieb sú auxww. Voľba a zobrazí informáciu o všetkých bežiacich procesoch a nielen o vlastných. Voľba u zobrazí používateľov vlastniacich procesy spolu s využitím pamäte. Voľba x zobrazí informáciu o procesoch démonov a voľba ww spôsobí, že ps(1) zobrazí celý príkaz namiesto toho aby ho orezal podľa šírky obrazovky.

Výstup príkazu top(1) je podobný. Jeho výstup môže vyzerať napríklad takto:

% top
last pid: 72257;  load averages:  0.13,  0.09,  0.03    up 0+13:38:33  22:39:10
47 processes:  1 running, 46 sleeping
CPU states: 12.6% user,  0.0% nice,  7.8% system,  0.0% interrupt, 79.7% idle
Mem: 36M Active, 5256K Inact, 13M Wired, 6312K Cache, 15M Buf, 408K Free
Swap: 256M Total, 38M Used, 217M Free, 15% Inuse

  PID USERNAME PRI NICE  SIZE    RES STATE    TIME   WCPU    CPU COMMAND
72257 nik       28   0  1960K  1044K RUN      0:00 14.86%  1.42% top
 7078 nik        2   0 15280K 10960K select   2:54  0.88%  0.88% xemacs-21.1.14
  281 nik        2   0 18636K  7112K select   5:36  0.73%  0.73% XF86_SVGA
  296 nik        2   0  3240K  1644K select   0:12  0.05%  0.05% xterm
48630 nik        2   0 29816K  9148K select   3:18  0.00%  0.00% navigator-linu
  175 root       2   0   924K   252K select   1:41  0.00%  0.00% syslogd
 7059 nik        2   0  7260K  4644K poll     1:38  0.00%  0.00% mutt
...

Výstup je rozdelený do dvoch častí. Hlavička (prvých päť riadkov) zobrazuje PID posledného spusteného procesu, priemernú záťaž systému, celkovú dĺžku behu systému (od posledného reštartu) a aktuálny čas. Ostatné položky v hlavičke hovoria o tom koľko procesov je spustených v systéme (v našom prípade 47), koľko pamäte a koľko swapovacieho priestoru sa využíva a koľko času systém strávil v rôznych stavoch procesora.

Pod touto časťou sa nachádza niekoľko stĺpcov, ktoré obsahujú podobné informácie ako v prípade výstupu z príkazu ps(1). Rovnako môžeme vidieť stĺpec PID, vlastníka procesu, množstvo použitého času procesora a príkaz, ktorým bol proces spustený. Príkaz top(1) v predvolenom stave zobrazuje aj veľkosť pamäte použitej procesom. Táto informácia je rozdelená do dvoch stĺpcov, jeden hovorí o celkovej veľkosti a druhý o rezidentnej veľkosti – celková veľkosť hovorí o tom, koľko pamäte aplikácia potrebuje, a rezidentná veľkosť hovorí o tom, koľko pamäte práve využíva. V tomto príklade môžeme vidieť, že Netscape® vyžaduje takmer 30 MB operačnej pamäte, no práve používa iba 9 MB.

Príkaz top(1) automaticky aktualizuje zobrazenie každé dve sekundy, čo je možné zmeniť pomocou voľby s.