25.13. O sistema de arquivos /proc

O sistema de arquivos /proc é um pseudossistema de arquivos no qual o kernel reserva informações importantes na forma de arquivos virtuais. Por exemplo, exiba o tipo de CPU com este comando:

$ cat /proc/cpuinfo
processor       : 0
vendor_id       : AuthenticAMD
cpu family      : 6
model           : 8
model name      : AMD Athlon(tm) XP 2400+
stepping        : 1
cpu MHz         : 2009.343
cache size      : 256 KB
fdiv_bug        : no
[...]

A alocação e o uso de interrupções podem ser consultados com o seguinte comando:

$ cat /proc/interrupts 
CPU0 
0:  537544462          XT-PIC  timer 
1:     820082          XT-PIC  keyboard 
2:          0          XT-PIC  cascade 
8:          2          XT-PIC  rtc 
9:          0          XT-PIC  acpi 
10:      13970          XT-PIC  usb-uhci, usb-uhci 
11:  146467509          XT-PIC  ehci_hcd, usb-uhci, eth0 
12:    8061393          XT-PIC  PS/2 Mouse 
14:    2465743          XT-PIC  ide0 
15:       1355          XT-PIC  ide1
NMI:          0
LOC:          0
ERR:          0
MIS:          0

Alguns arquivos importantes e seu conteúdo:

/proc/devices

dispositivos disponíveis

/proc/modules

módulos kernel carregados

/proc/cmdline

linha de comando do kernel

/proc/meminfo

detalhes sobre a utilização da memória

/proc/config.gz

arquivo de configuração gzip compactado do kernel executado atualmente

Mais informações estão disponíveis no arquivo de texto /usr/src/linux/Documentation/filesystems/proc.txt. Você pode encontrar informações sobre os processos em execução nos diretórios /proc/NNN, onde NNN é o ID do processo (PID) relevante. Cada processo pode encontrar suas próprias características em /proc/self/:

$ ls -l /proc/self
lrwxrwxrwx  1 root root 64 Apr 29 13:52 /proc/self -> 27585

$ ls -l /proc/self/
total 0
dr-xr-xr-x  2 jj suse 0 Apr 29 13:52 attr
-r--------  1 jj suse 0 Apr 29 13:52 auxv
-r--r--r--  1 jj suse 0 Apr 29 13:52 cmdline
lrwxrwxrwx  1 jj suse 0 Apr 29 13:52 cwd -> /suse/jj/t
-r--r--r--  1 jj suse 0 Apr 29 13:52 delay
-r--------  1 jj suse 0 Apr 29 13:52 environ
lrwxrwxrwx  1 jj suse 0 Apr 29 13:52 exe -> /bin/ls
dr-x------  2 jj suse 0 Apr 29 13:52 fd
-rw-------  1 jj suse 0 Apr 29 13:52 mapped_base
-r--r--r--  1 jj suse 0 Apr 29 13:52 maps
-rw-------  1 jj suse 0 Apr 29 13:52 mem
-r--r--r--  1 jj suse 0 Apr 29 13:52 mounts
lrwxrwxrwx  1 jj suse 0 Apr 29 13:52 root -> /
-r--r--r--  1 jj suse 0 Apr 29 13:52 stat
-r--r--r--  1 jj suse 0 Apr 29 13:52 statm
-r--r--r--  1 jj suse 0 Apr 29 13:52 status
dr-xr-xr-x  3 jj suse 0 Apr 29 13:52 task
-r--r--r--  1 jj suse 0 Apr 29 13:52 wchan

A atribuição de endereço de executáveis e bibliotecas pode ser encontrada no arquivo maps:

$ cat /proc/self/maps
08048000-0804c000 r-xp 00000000 03:02 22890      /bin/cat
0804c000-0804d000 rw-p 00003000 03:02 22890      /bin/cat
0804d000-0806e000 rwxp 0804d000 00:00 0
40000000-40016000 r-xp 00000000 03:02 10882      /lib/ld-2.3.3.so
40016000-40017000 rw-p 00015000 03:02 10882      /lib/ld-2.3.3.so
40017000-40018000 rw-p 40017000 00:00 0
4002b000-40135000 r-xp 00000000 03:02 10908      /lib/tls/libc.so.6
40135000-4013d000 rw-p 0010a000 03:02 10908      /lib/tls/libc.so.6
4013d000-40141000 rw-p 4013d000 00:00 0
bfffe000-c0000000 rw-p bfffe000 00:00 0
ffffe000-fffff000 ---p 00000000 00:00 0