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) a 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.