3.5. Protsessid

FreeBSD on mitmetegumiline operatsioonisüsteem. See tähendab, et jääb mulje, justkui töötaks korraga mitu programmi. Iga programmi, mis töötab mingil ajahetkel, nimetatakse protsessiks . Iga käsk, mille sa käivitad, käivitab vähemalt ühe uue protsessi, peale selle on ka hulk süsteemiprotsesse, mis töötavad koguaeg ja hoiavad süsteemi funktsionaalsena.

Igat protsessi identifitseeritakse unikaalsena protsessi ID ehk PID järgi ja nagu failidelgi on ka igal protsessil omanik ja grupp. Omaniku ja grupi informatsioon määrab ära, milliseid faile ja seadmeid protsess tohib kasutada, seda eelpool kirjeldatud failiõiguste põhjal. Paljudel protsessidel on ka ülemprotsess. See on protsess, mis nad käivitas. Näiteks kui sa kirjutad shelli käske, siis shell on protsess ja kõik käsud, mis sa käivitad, on ka protsessid. Iga selliselt tekitatud protsessi ülemprotsessiks on shell. Erandiks on eriline protsess, mille nimi on init. init on alati esimene protsess, seega on tema PID alati 1. init käivitatakse automaatselt kerneli poolt, kui FreeBSD stardib.

Süsteemis käivate protsesside nägemiseks on eriti kasulikud kaks käsku: ps(1) ja top(1). Käsku ps(1) kasutatakse staatilise nimekirja saamiseks hetkel jooksvatest protsessidest ja see käsk võib näidata nende protsesside PID'i, mälukasutust, käsku, millega protsess käima pandi, ja nii edasi; käsk ps(1) näitab kõiki jooksvaid protsesse ja värskendab infot iga paari sekundi tagant, et sa saaksid pidevalt jälgida, mida su arvuti parajasti teeb.

Vaikimisi näitab ps(1) ainult käske, mis hetkel töötavad ja mille omanikuks oled sina. Näiteks:

% 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

Nagu siit näha võib, on käsu ps(1) väljastatav info jagatud mitmeks tulbaks. PID on protsessi ID millest oli juba eespool juttu, PID'e antakse alates numbrist 1, kuni numbrini 99999 ja seejärel uuesti otsast peale, kui arvud otsa lõppevad. TT näitab tty'd, millel programm jookseb, hetkel võime seda julgelt lihtsalt ignoreerida. STAT näitab programmi olekut, ka seda võime praegu ignoreerida. TIME näitab, kui kaua on programm CPU peal töötanud. See ei ole tingimata võrdne ajahulgaga, mis on möödunud hetkest, kui sa programmi käivitasid, kuna mõned programmid veedavad suure hulga aega millegi ootamise taga enne, kui nad CPU aega võtavad. Ja viimane, COMMAND-tulp näitab käsurida, millega programm käivitati.

ps(1) toetab ka mitmeid erinevaid valikuid, mis muudavad väljastatavat informatsiooni. Üks kasulikumaid valikute komplekte on auxww. a näitab infot kõikide protsesside kohta, mis jooksevad, mitte ainult sinu omade kohta. u näitab protsessi omaniku kasutajanime ja ka mälukasutust. x näitab infot deemonprotsesside kohta ja ww sunnib ps(1)'i näitama täielikku käsku, millega programm käivitati (vaikimisi lõigatakse käsu lõpp ära, kui see ekraanile mahtumiseks liiga pikk on).

top(1) väljastab infot üsna sarnaselt. Näidis-sessioon näeb välja umbes selline:

% 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äljund on jagatud kahte sektsiooni. Päis (esimesed viis rida) näitavad viimasena jooksnud protsessi PID'i, süsteemi koormuse keskmisi (mis näitavad, kui koormatud süsteem on), süsteemi uptime'i (aega alates viimasest reboodist) ja praegust kellaaega. Teised numbrid päises näitavad, kui palju palju protsesse kokku töötab (antud juhul 47), kui palju mälu ja saaleala on kasutuses ja kui palju aega süsteem veedab erinevates CPU olekutes.

Sellest allpool on mitu tulpa, mis sisaldavad umbes sama informatsiooni nagu ps(1)-i väljundki. Nagu ennegi, näed sa PID'i, kasutajanime, kasutatud CPU aega ja käsku, millega programm käivitati. top(1) näitab vaikimisi ka, kui palju mälu mingi protsess võtab. See on jagatud kahte tulpa, millest üks näitab kogu suurust ja teine residentset suurust - kogu suurus on see, kuipalju mälu antud protsess on vajanud, ja residentne suurus näitab, kui palju mälu protsess tegelikult antud hetkel kasutab. Selle näite puhul on näha, et Netscape® on vajanud vahepeal 30MB mälu ja hetkel kasutab ainult 9MB.

top(1) uuendab informatsiooni automaatselt iga kahe sekundi tagant; seda saab muuta valiku s abil.