Se você listar o conteúdo do diretório
/proc
, você verá vários diretório que
possuem números como nome. Estes são os diretórios contendo
informações de todos os processos que estão sendo executados
no sistema:
$ 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/
Note que, como um usuário, você só pode (logicamente) exibir informações relacionadas aos seus processos, e sobre os processos dos outros usuários. Então, acesse o sistema como root
e veja quais informações estão disponíveis sobre o processo 1, que é o processo do init e o responsável por iniciar todos os outros:
$ 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 #
Cada diretório contém as mesmas entradas. Aqui está uma descrição breve de algumas delas:
cmdline
: este
(pseudo-)arquivo contém toda a linha de comando utilizada para
invocar o processo. Ela não está formatada: não há espaços
entre o programa e seus argumentos, e nem caractere de nova
linha no final. Para visualizá-la, você pode usar: perl -ple 's,\00, ,g'
cmdline.
cwd
: este link
simbólico aponta para o diretório de trabalho atual do
processo (“cwd - current working directory (diretório de trabalho atual)”).
environ
:
este arquivo contém todas as variáveis de ambiente definidas
para este processo, na forma VARIÁVEL=valor
. Similar ao cmdline
, a saída não é
formatada de nenhuma maneira: as variáveis não são separadas
em novas linhas, e também não há indicação de nova linha no final. Uma maneira de vê-la é através do comando: perl -ple 's,\00,\n,g'
environ.
exe
: este é um
link simbólico apontando para o arquivo executável do processo.
fd
: este
subdiretório contém a lista dos descritores de arquivo
atualmente abertos pelo processo. Veja abaixo.
maps
:
quando você exibe o conteúdo deste pipe nomeado (com o comando
cat por exemplo), você pode ver as partes
do espaço de endereço do processo que está mapeado para um
arquivo. Da esquerda para a direita, os campos são: o espaço
de endereço associado a este mapeamento, as permissões
associadas a estes mapeamento, a marca no início do arquivo onde começa o mapeamento, o número principal e secundário (em
hexadecimal) do dispositivo em que o arquivo mapeado está
localizado, o número do inode do arquivo, e finalmente o nome
do arquivo propriamente dito. Quado o dispositivo é 0 e não há
número de inde ou nome do arquivo, este é um mapeamento anônimo. Veja mmap(2).
root
: este é um link
simbólico que aponta para o diretório raiz utilizado pelo
processo. Normalmente ele será /
, mas
veja chroot(2) para mais informações.
status
: este arquivo contém
diversas informações sobre o processo: o nome do executável,
seu estado atual, seu PID e PPID, seu UID e GID real e
efetivo, seu uso de memória, e outras informações. Note que os arquivos stat
e statm
são obsoletos. A informação que eles contém está agora armazenada no status
.
Se nós listarmos o
conteúdo do diretório fd
para um processo
escolhido aleatoriamentes nós
iremos obter isso:
# ls -l /proc/8141/fd/ total 4 lrwx------ 1 usuario2 usuario2 64 Aug 4 09:05 0 -> /dev/tty1 lrwx------ 1 usuario2 usuario2 64 Aug 4 09:05 1 -> /dev/tty1 lrwx------ 1 usuario2 usuario2 64 Aug 4 09:05 2 -> /dev/tty1 l-wx------ 1 usuario2 usuario2 64 Aug 4 09:05 3 -> /home/usuario2/seti32/lock.sah #
Na verdade, esta é a lista de descritores de arquivo aberta pelo processo. Cada descritor aberto do arquivo é exibido por um link simbólico, onde o nome é o número descritor, e aponta para o arquivo aberto por ele[7]. Note as permissões nos links simbólicos: este é o único lugar onde elas fazem sentido, já que elas representam as permissões do arquivo aberto que corresponde ao descritor.
[7] Se você se lembra o que foi explicado na Seção 4, “Redirecionamentos e Pipes”, você sabe o que significam os descritores 0
, 1
e 2
. O descritor 0
é a entrada padrão, 1
é a saída padrão e 2
é o erro padrão.