1. Protsesside info

Kui Te uurite kataloogi /proc sisu, näete seal paljusid katalooge, mille nimeks on mingi arv. Need kataloogid sisaldavad infot parajasti Teie süsteemis töötavate protsesside kohta:

$ ls -d /proc/[0-9]*
/proc/1/    /proc/302/  /proc/451/  /proc/496/  /proc/556/  /proc/633/
/proc/127/  /proc/317/  /proc/452/  /proc/497/  /proc/557/  /proc/718/
/proc/2/    /proc/339/  /proc/453/  /proc/5/    /proc/558/  /proc/755/
/proc/250/  /proc/385/  /proc/454/  /proc/501/  /proc/559/  /proc/760/
/proc/260/  /proc/4/    /proc/455/  /proc/504/  /proc/565/  /proc/761/
/proc/275/  /proc/402/  /proc/463/  /proc/505/  /proc/569/  /proc/769/
/proc/290/  /proc/433/  /proc/487/  /proc/509/  /proc/594/  /proc/774/
/proc/3/    /proc/450/  /proc/491/  /proc/554/  /proc/595/

Arvestage, et kasutajana saate (täiesti loogiliselt) näha ainult enda, mitte aga teiste kasutajate protsesside infot. Sestap logige sisse administraatorina (root) ja vaadake, milline info käib protsessi 1 kohta, milleks on init, mis vastutab kõigi teiste protsesside käivitamise eest:

$ su
Password:
# cd /proc/1
# ls -l
total 0
-r--------  1 root root 0 Aug 15 18:14 auxv
-r--r--r--  1 root root 0 Aug 15 18:14 cmdline
lrwxrwxrwx  1 root root 0 Aug 15 18:14 cwd -> //
-r--------  1 root root 0 Aug 15 18:14 environ
lrwxrwxrwx  1 root root 0 Aug 15 18:14 exe -> /sbin/init*
dr-x------  2 root root 0 Aug 15 18:14 fd/
-rw-r--r--  1 root root 0 Aug 15 18:14 loginuid
-r--r--r--  1 root root 0 Aug 15 18:14 maps
-rw-------  1 root root 0 Aug 15 18:14 mem
-r--r--r--  1 root root 0 Aug 15 18:14 mounts
-rw-r--r--  1 root root 0 Aug 15 18:14 oom_adj
-r--r--r--  1 root root 0 Aug 15 18:14 oom_score
lrwxrwxrwx  1 root root 0 Aug 15 18:14 root -> //
-rw-------  1 root root 0 Aug 15 18:14 seccomp
-r--r--r--  1 root root 0 Aug 15 18:14 stat
-r--r--r--  1 root root 0 Aug 15 18:14 statm
-r--r--r--  1 root root 0 Aug 15 18:14 status
dr-xr-xr-x  3 root root 0 Aug 15 18:14 task/
-r--r--r--  1 root root 0 Aug 15 18:14 wchan
#

Kõigis kataloogides on ühesugused kirjed. Tutvustame siin lühidalt neist mõningaid:

  1. cmdline: see (pseudo)fail sisaldab kogu protsessi välja kutsunud käsku. See ei ole vormindatud: programmi ja argumentide vahel pole tühikuid, ka puuduvad reavahetused. Selle vaatamiseks tuleks kasutada käsku perl -ple 's,\00, ,g' cmdline.

  2. cwd: see nimeviit osutab protsessi aktiivsele töökataloogile (inglise keeles 'current working directory', millest ka lühend).

  3. environ: see fail sisaldab kõiki antud protsessile määratud keskkonnamuutujaid kujul MUUTUJA=väärtus. Sarnaselt kirjele cmdline ei ole väljund vähimalgi määral vormindatud: muutujaid ei eralda reavahetused, reavahetust pole ka lõpus. Selle vaatamiseks sobib käsk perl -ple 's,\00,\n,g' environ.

  4. exe: see nimeviit osutab käivitatavale failile, mis vastab töötavale protsessile.

  5. fd: selles alamkataloogis leiduvad protsessi poolt parajasti avatud failide deskriptorid (vt. allpool).

  6. maps: selle nimega toru sisu näidata lastes (näiteks käsuga cat) näete parajasti failiga seostatud protsessi aadressiruumi osasid. Väljad on paremalt vasakule järgmised: seosega seotud aadressiruum, seose õigused, suhtaadress (faili algusest), kus seos algab, seadme põhi- ja lisanumber (16-süsteemis), millel seotud fail asub, faili infosõlmenumber ning faili enda nimi. Kui seade on 0 ning infosõlmenumber või failinimi puuduvad, on tegemist anonüümse seosega. Vaadake mmap(2).

  7. root: see nimeviit osutab protsessi juurkataloogile. Tavaliselt on see /, aga vaadake chroot(2).

  8. status: see fail sisaldab mitmesugust infot protsessi kohta: käivitatava faili nimi, praegune olek, PID ja PPID, reaalne ja toimiv UID ja GID, mälukasutus ja nii edasi. Pange tähele, et failid stat ja statm on iganenud: neis sisaldunud infot salvestatakse nüüd failis status.

Kui me laseme näidata suvalise protsessi kataloogi fd sisu, on tulemus umbes selline:

# ls -l /proc/8141/fd/
total 4
lrwx------  1 peter peter 64 Aug  4 09:05 0 -> /dev/tty1
lrwx------  1 peter peter 64 Aug  4 09:05 1 -> /dev/tty1
lrwx------  1 peter peter 64 Aug  4 09:05 2 -> /dev/tty1
l-wx------  1 peter peter 64 Aug  4 09:05 3 -> /home/peter/seti32/lock.sah
#

Siin on tegemist protsessi avatud failide deskriptoritega. Iga avatud deksriptorit näitab nimeviit, mille nimeks on deskriptori number ja mis osutab antud deskriptori avatud failile[7]. Pange tähele nimeviitade õigusi: see on ainus koht, kus neil on mingi mõte, sest nad tähistavad õigusi, millega deskriptorile vastav fail avati.



[7] Kui Te meenutate, millest rääkis Sektsioon 4, “Ümbersuunamine ja torud”, peaksite teadma, mida tähendavad deskriptorid 0, 1 ja 2. Deskriptor 0 on standardsisend, 1 on standardväljund ja 2 on standardveaväljund.