proc - pseudo sistema de arquivos de informações de
processos.
/proc é um pseudo sistema de arquivos usado como uma
interface para as estruturas de dados do kernel, assim como para leitura e
interpretação de /dev/kmem. Muitos dos arquivos fornecem
somente permissões de leitura, mas alguns permitem que
variáveis do kernel seja alteradas.
Apresentamos a seguir uma rápida descrição da
hierarquia do /proc.
- [número]
- Há um subdiretório numérico para cada processo que
esteja sendo executado; o subdiretório tem o nome da
identificação do processo (PID). Cada um contém os
seguintes pseudo arquivos e diretórios:
- cmdline
- Contém a linha de comando completa para o processo, a menos que
todo o processo tenha sido transferido para a área de troca (swap),
ou seja um processo zumbi. Nestes casos o arquivo estará vazio;
isto é um arquivo que retornará 0 caracteres. Este arquivo
é terminado com o caracter nulo, e não com nova linha.
- cwd
- É o link do diretório atual de trabalho do processo. Para
encontrar o cwd do processo 20, por exemplo, deve-se:
cd /proc/20/cwd; /bin/pwd
Note que o comando pwd está freqüentemente
incorporado no interpretador de comandos e pode não funcionar
exatamente desta forma neste contexto.
- environ
- Este arquivo contém o ambiente do processo. As entradas são
separadas por caracteres nulos, e deve haver um caracter nulo ao final do
arquivo. Para listar o ambiente do processo 1, deve-se:
(cat /proc/1/environ; echo) | tr "\000" "\n"
(caso alguém queira saber porque fazer isso, veja o comando
lilo(8).)
- exe
- um ponteiro para o binário que está sendo executado e
aparece como uma ligação simbólica.
readlink(2) no arquivo especial exe retorna sob o Linux 2.0 ou mais
recente a seguinte cadeia de caracteres no formato:
[dispositivo]:inode
Por exemplo, [0301]:1502 pode ser o inode 1502 no dispositivo
com identificação primária 03 (major) (IDE, MFM,
etc...) e secundária 01 (minor) (primeira partição
do primeiro dispositivo). Sob o Linux 2.2 a ligação
simbólica contém a caminho de busca atual do comando.
Ainda, a ligação simbólica pode ser
referenciada normalmente, ou seja ao tentar-se abrir "exe" ,
na verdade será aberto o executável. Pode ainda executar o
comando /proc/[número]/exe para executar uma cópia
do mesmo processo como [número].
find(1) com a opção -inum pode ser usado
para localizar um arquivo.
- fd
- Este é um subdiretório contendo uma entrada para cada
arquivo aberto pelo processo, nomeado pelos seus descritores e que tenham
uma ligação simbólica com o arquivo real (como nas
entradas em exe). Zero é a entrada padrão, 1 a saída
padrão e 2 a saída padrão de erros, etc...
Programas que utilizarão nomes de arquivos, mas
não a partir da entrada padrão, e que gravam arquivos, mas
não através da saída padrão, podem ser
depurados através do seguinte comando (assumindo-se -i como o
indicador do arquivo de entrada e -o como o indicador do arquivo de
saída:
foobar -i /proc/self/fd/0 -o /proc/self/fd/1 ...
tendo-se então um filtro de trabalho. Note que isso não
irá funcionar para programas que fazem buscas em seus arquivos,
pois os arquivos no diretório fd não podem ser pesquisados.
/proc/self/fd/N é aproximadamente o mesmo que /dev/fd/N
em alguns sistemas UNIX e similares a UNIX. Diversos scripts MAKEDEV do
Linux ligam simbolicamente /dev/fd para /proc/self/fd, na verdade.
- maps
- Um arquivo contendo o mapa atual de regiões da memória e
suas permissões de acesso.
O formato é:
endereço perms desl. disp inode
00000000-0002f000 r-x-- 00000400 03:03 1401
0002f000-00032000 rwx-p 0002f400 03:03 1401
00032000-0005b000 rwx-p 00000000 00:00 0
60000000-60098000 rwx-p 00000400 03:03 215
60098000-600c7000 rwx-p 00000000 00:00 0
bfffa000-c0000000 rwx-p 00000000 00:00 0
onde endereço é o endereço do espaço
de memória que o processo ocupa, e perms é o conjunto de
permissões:
r = leitura
w = gravação
x = execução
s = compartilhada
p = privada (copia da gravação)
deslocamento é o deslocamento no arquivo, disp é o
dispositivo (primária:secundária)(major:minor), e inode
refere-se ao inode do dispositivo. Zero indica que o inode está
associado à uma região da memória, como o caso estaria
com bss.
Nos kerneis 2.2 há um campo adicional fornecendo um caminho
de busca quando aplicável.
- mem
- Este não é igual ao dispositivo mem (1,1), apesar de ter o
mesmo número de dispositivos. O dispositivo /dev/mem é a
memória física antes da conversão de
endereços, mas o arquivo mem aqui descrito é a
memória acessada pelo processo. Ela não pode ser mapeada por
mmap(2) 'ed atualmente, e não poderá até que
uma mmap(2) geral seja adicionada ao kernel (o que pode ocorrer em
breve).
- mmap
- Diretório dos mapas gerados por mmap(2) os quais são
ligações simbólicas como exe, fd/*, etc. Note que
estes mapas incluem um subconjunto destas informações,
então /proc/*/mmap podem ser considerados obsoletos.
"0" é normalmente libc.so.4.
/proc/*/mmap foi removido do kernel do Linux na
versão 1.1.40 (e realmente estava obsoleto)
- root
- Unix e Linux suportam a idéia de um raiz de sistema de arquivos por
processo, definidos pela chamada ao sistema chroot(2) . Root aponta
o raiz do sistema de arquivos, e comporta-se como exe, fd/*, etc...
- stat
- Informações sobre o status do processo. Isso é
fornecido por ps(1) .
Os campos, em ordem, com as suas propriedades
específicas em scanf(3) são:
- pid %d
- Identificação do processo.
- comm %s
- O nome do arquivo do executável entre parênteses. É
visível mesmo que o processo esteja na área de troca.
- state %c
- Um caracter da cadeia "RSDZT" onde R é em
execução, S é dormindo em uma espera por
interrupção, D aguardando em uma espera que não pode
ser interrompida ou em área de troca, Z é um zumbi e T
significa paralisado (em um sinal) ou rastreado.
- ppid %d
- O PID do processo pai.
- pgrp %d
- O ID do grupo do processo.
- session
%d
- O ID da sessão do processo.
- tty %d
- O tty que o processo usa.
- tpgid %d
- A ID do grupo do processo que atualmente detém o tty no qual o
processo está conectado.
- flags %u
- Os indicadores do processo. Atualmente, cada indicador tem o bit
matemático configurado, porque crt0.s verifica a
emulação de co-processador matemático, e isso
não é incluído na saída. Isso é
provavelmente um erro, e nem todos os processos são compiladores C.
O bit matemático é um decimal 4 e o bit de rastreamento
é um decimal 10.
- minflt %u
- O número de pequenos erros do processo, aqueles que não
requerem a carga de páginas de memória a partir do
disco.
- cminflt
%u
- O número de erros menores do processo e de seus processos filhos.
- majflt %u
- O número de erros maiores do processo, aqueles que requerem a carga
de páginas de memória a partir do disco.
- cmajflt
%u
- O número de erros maiores do processo e de seus processo filhos.
- utime %d
- O número de ciclos do processador que o processo tem previsto em
modo usuário.
- stime %d
- O número de ciclos do processador que o processo tem previsto em
modo kernel.
- cutime %d
- O número de ciclos do processador que o processo e seus filhos
têm previstos em modo usuário.
- cstime %d
- O número de ciclos do processador que o processo e seus filhos
têm previstos em modo kernel.
- counter
%d
- O número máximo de ciclos do processador do próximo
período de processamento destinado ao processo, ou o tempo restante
no período atual, caso o processo esteja ocupando o
processador.
- priority
%d
- O valor padrão acrescido de 15. O valor nunca é negativo no
kernel.
- timeout
%u
- O tempo em ciclos do processador do próximo período de
espera.
- itrealvalue
%u
- O tempo (em ciclos do processador) antes que o próximo SIGALRM seja
enviado para o processo relativo a um intervalo de tempo.
- starttime %d
Tempo, em ciclos do processador, que o processo iniciou após
o
- sistema ser iniciado.
- vsize %u
- Tamanho da memória virtual.
- Tamanho do conjunto residente: número de páginas que o
processo tem na memória real, menos 3 para uso administrativo.
Estas são as páginas que contêm texto, dados ou
espaço da pilha, não incluindo páginas que foram
carregadas de acordo com a demanda ou que foram para a área de
troca.
- rlim %u
- Limite em bytes do rss do processo (normalmente 2,147,483,647).
- startcode
%u
- O endereço acima do qual o texto do programa deve ser
executado.
- endcode
%u
- O endereço abaixo do qual o texto do programa deve ser
executado.
- startstack
%u
- O endereço de início da pilha.
- kstkesp
%u
- O valor atual de esp (ponteiro da pilha com 32 bits), conforme encontrado
na pilha de páginas do kernel para o processo.
- kstkeip
%u
- EIP atual (ponteiro da instrução com 32 bits).
- signal %d
- O mapa de bits dos sinais pendentes (normalmente zero).
- blocked
%d
- O mapa de bits dos sinais bloqueados (normalmente 0, 2 para ambientes de
trabalho).
- sigignore
%d
- O mapa de bits dos sinais ignorados.
- sigcatch
%d
- O mapa de bits de sinais recebidos.
- wchan %u
- Este é o canal no qual o processo fica esperando. Este é o
endereço da chamada ao sistema, e pode ser analisada em uma lista
de nomes, caso se necessite de um nome textual (caso se tenha um
/etc/psdatabase atualizado, então tente ps -l para ver o
campo WCHAN em ação).
- cpuinfo
- Esta é uma coleção de itens dependentes da CPU e da
arquitetura do sistema, sendo que cada uma destas tem uma lista diferente.
As únicas duas entradas comuns são cpu a qual
é a CPU atual em uso e BogoMIPS uma constante do sistema que
é calculada durante a inicialização do sistema.
- devices
- Lista dos números primários (majors) e grupos de
dispositivos. Isso pode ser usado pelos scripts MAKEDEV para checagem de
consistência com o kernel.
- dma
- Lista dos canais DMA ISA (acesso direto à memória)
registrados em uso.
- filesystems
- lista dos sistemas de arquivos que foram compilados com o kernel. Pode ser
usado por mount(1) para pesquisar através de diferentes
sistemas de arquivos quando nenhum é especificado.
- interrupts
- É usado para gravar o número de interrupções
por cada IRQ nas arquiteturas i386. Muito simples de ler-se, feito em
formato ASCII.
- ioports
- Lista das portas de Entrada-Saída registradas que estão em
uso.
- kcore
- Este arquivo representa a memória física do sistema e
está armazenada no formato de arquivo core. Com este pseudo
arquivo, e o binário do kernel com as funções de
mensagens incorporadas (/usr/src/linux/tools/zSystem), pode-se usar o GDB
para examinar o estado atual de qualquer estrutura de dados do kernel.
O tamanho total do arquivo é o tamanho da
memória física (RAM) mais 4 Kb.
- kmsg
- Este arquivo pode ser usado ao invés da chamada ao sistema
syslog(2) para registrar mensagens do kernel. Um processo deve ter
privilégios de superusuário para ler este arquivo e somente
um processo pode fazer isso. Esse arquivo não deve ser lido se um
processo syslog está sendo executado o qual usa a chamada ao
sistema syslog(2) para registrar as mensagens do kernel.
Informações deste arquivos são
recuperadas com o programa dmesg(8)
- ksyms
- Contém as definições dos símbolos exportados
pelo kernel usados pelas ferramentas de módulos(X) para
dinamicamente ligar e vincular módulos carregáveis.
- loadavg
- A média de carga do sistema fornecida pela média do
número de serviços na fila de execução
há mais de 1, 5 e 15 minutos. É o mesmo que a média
dada pelo programa uptime(1) e outros.
- locks
- Este arquivo exibe os arquivos travados.
- malloc
- Este arquivo somente está presente se CONFIGDEBUGMALLOC for
definido durante a compilação.
- meminfo
- É usada pelo comando free(1) para informar a quantidade de
memória livre e utilizada (tanto a memória física
como a de troca) assim como a memória compartilhada e os buffers
usados pelo kernel.
Tem o mesmo formato que o comando free(1) , exceto pelo
fato de estar em bytes ao invés de Kb.
- modules
- Uma lista dos módulos carregados pelo sistema.
- net
- Vários pseudo arquivos, que fornecem o status de alguma parte da
camada de rede. Estes arquivos contêm estruturas em formato ASCII e
podem ser lidas por exemplo pelo cat. De qualquer forma, as ferramentas do
netstat(8) possibilitam um acesso muito mais adequado a estes
arquivos.
- arp
- Ele contém uma imagem em formato ASCII da tabela ARP do kernel
usada na resolução de endereços. Irá
apresentar dinamicamente as entradas ARP pré-programadas e
recebidas dinamicamente. O formato é:
IP address HW type Flags HW address
10.11.100.129 0x1 0x6 00:20:8A:00:0C:5A
10.11.100.5 0x1 0x2 00:C0:EA:00:00:4E
44.131.10.6 0x3 0x2 GW4PTS
Onde 'IP address' é o endereço Ipv4 da
máquina, o 'HW type' é o tipo de hardware no endereço
conforme a RFC 826. Os indicadores são internos à estrutura
ARP(conforme definido em /usr/include/linux/if_arp.h) e o
- dev
- Os pseudo arquivos dev contêm informações sobre a
situação dos dispositivos de rede. Ele dá o
número de pacotes recebidos e enviados, o número de erros e
colisões e outras estatísticas básicas. Eles
são usados pelo programa ifconfig(8) para apresentar
relatórios do status do dispositivo. O formato é:
Inter-| Receive | Transmit
face |packets errs drop fifo frame|packets errs drop fifo colls carrier
lo: 0 0 0 0 0 2353 0 0 0 0 0
eth0: 644324 1 0 0 1 563770 0 0 0 581 0
- ipx
- Nenhuma informação.
- ipx_route
- Nenhuma informação.
- rarp
- Este arquivo usa o mesmo formato do arquivo arp e contém a
base de dados de mapeamento reverso usado para prover os serviços
de pesquisa de endereços reversos do rarp(8) . Caso RARP
não esteja configurado no kernel este arquivo não
estará presente.
- raw
- Mantém uma imagem RAW (crua) da tabela de conexões. Muita
desta informação não tem outra finalidade
senão a depuração. O valor 'sl' é a
área do kernel para a conexão, e 'local address' é o
endereço local e o par de números de protocolo.
"St" é o status interno da conexão.
"tx_queue" e "rx_queue" são as filas de dados
de entrada e saída em termos de uso de memória do kernel. Os
campos "tr", "tm->when" e "rexmits"
não são usados por RAW. O campo uid contém a
identificação do criador da conexão.
- route
- Nenhuma informação, mas parece similar ao
route(8)
- snmp
- Este arquivo contém dados em formato ASCII necessários para
o gerenciamento de IP, ICMP, TCP e UDP por um agente snmp. As of writing
the TCP mib is incomplete. It is hoped to have it completed by 1.2.0.
- tcp
- Mantém uma imagem da tabela de conexões TCP. Muitas
informações são utilizadas exclusivamente para
depuração. O valor 'sl' é a área do kernel
para a conexão, e 'local address' é o endereço local
e o par de números de protocolo. O "endereço
remoto" é o par endereço remoto e o número da
porta (se conectado). "St" é o status interno da
conexão. "tx_queue" e "rx_queue" são as
filas de entrada de dados e de saída em termos de uso de
memória do kernel. Os campos "tr",
"tm->when" e "rexmits" hold internal information of
the kernel socket state and are only useful debugging. O campo uid
contém a identificação do criador da
conexão.
- udp
- Mantém uma imagem da tabela de conexões UDP. Muitas
informações são utilizadas exclusivamente para
depuração. O valor 'sl' é a área do kernel
para a conexão, e 'local address' é o endereço local
e o par de números de protocolo. O "endereço
remoto" é o par endereço remoto e o número da
porta (se conectado). "St" é o status interno da
conexão. "tx_queue" e "rx_queue" são as
filas de dados de entrada e saída em termos de uso de
memória do kernel. Os campos "tr",
"tm->when" e "rexmits" não são usados
pelo UDP. O campo uid contém a identificação do
criador da conexão. O formato é:
sl local_address rem_address st tx_queue rx_queue tr rexmits tm->when uid
1: 01642C89:0201 0C642C89:03FF 01 00000000:00000001 01:000071BA 00000000 0
1: 00000000:0801 00000000:0000 0A 00000000:00000000 00:00000000 6F000100 0
1: 00000000:0201 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0
- unix
- Lista de conexões com domínios Unix presentes no sistema e
seus status. O formato é:
Num RefCount Protocol Flags Type St Path
0: 00000002 00000000 00000000 0001 03
1: 00000001 00000000 00010000 0001 01 /dev/printer
Onde 'Num' é a área do kernel, 'RefCount' é o
número de usuários da conexão, 'Protocol' é
atualmente sempre zero, 'Flags' representam os indicadores internos do
kernel com o status da conexão. Tipo é sempre igual a 1
(datagramas de conexões a domínios Unix ainda não
são suportadas). 'St' é o estado interno da conexão e
Path é o caminho (caso exista) da conexão.
- pci
- Lista de todos os dispositivos PCI encontrados pelo kernel durante sua
inicialização e configuração.
- scsi
- Um diretório com pseudo arquivo scsi de nível médio
scsi, e vários diretórios de arquivos de controle de baixo
nível para dispositivos SCSI. Contém um arquivo para cada
dispositivo SCSI do sistema, cada um com o status de alguma parte do
subsistema de E/S SCSI. Estes arquivos contêm estruturas ASCII que
podem ser lidas pelo comando cat.
Pode-se ainda gravar alguns arquivos para reconfigurar o
subsistema ou ativar ou desativar algumas funcionalidades.
- scsi
- Uma lista de todos os dispositivos SCSI conhecidos pelo kernel. A lista
é similar a uma apresentada durante a inicialização
do sistema. SCSI atualmente suporta somente o comando singledevice
que permite ao superusuário adicionar dispositivos sem desligar o
sistema à lista de dispositivos conhecidos.
Um comando echo 'scsi singledevice 1 0 5 0' >
/proc/scsi/scsi provocará que scsi1 pesquise no canal SCSI 0
por um dispositivo de ID 5 LUN 0. Caso haja algum neste endereço
ou o endereço seja inválido, será retornado um
erro.
- drivername
- drivername pode atualmente ser: NCR53c7xx, aha152x, aha1542,
aha1740, aic7xxx, buslogic, eata_dma, eata_pio, fdomain, in2000, pas16,
qlogic, scsi_debug, seagate, t128, u15-24f, ultrastore ou wd7000. Estes
diretórios mostram todos os arquivos de controle que registraram
pelo menos um HBA SCSI. Cada diretório contém um arquivo
registrado por dispositivo. Cada arquivo é nomeado após a
indicação do número dado pela
inicialização.
Estes arquivos contêm a configuração do
dispositivo e do arquivo de controle estatísticas, etc.
A gravação nestes arquivos permite a
execução de diferentes tarefas. Por exemplo com os
comandos de superusuário latency e nolatency
pode-se ligar ou desligar o comando de medição de
latência no arquivo de controle eata_dma. Com os comandos
lockup e unlock pode-se controlar as pesquisas de controle
de barramento simuladas pelo arquivo de controle de dispositivo
scsi_debug .
- self
- Este diretório referencia-se ao processo de acesso ao sistema de
arquivos /proc, e é idêntico ao diretório /proc
nomeado pela identificação do mesmo processo.
- stat
- estatísticas do kernel e do sistema
- cpu 3357 0 4313
1362393
- O tempo dos ciclos do processador (em centésimos de segundo) que o
sistema despende em modo usuário, modo usuário de baixa
prioridade (nice), modo sistema e tarefas disponíveis,
respectivamente. O último valor deve ser 100 vezes a segunda
entrada no pseudo arquivo uptime.
- disk 0 0 0 0
- As entradas para quatro discos não estão implementadas
ainda. Não estamos seguros sequer que serão, uma vez que as
estatísticas do kernel em outras máquinas normalmente
monitora tanto a taxa de transferência quanto E/S por segundo e
este somente permite um campo por dispositivo.
- page 5741 1808
- O número de páginas que entraram no sistema e o
número de páginas que sairam (do disco).
- swap 1 0
- O número de páginas de troca que foram recebidas e enviadas
de/para a área de troca.
- intr 1462898
- O número de interrupções recebidas a partir da
inicialização do sistema.
- ctxt 115315
- O número de mudanças de contexto que o sistema
realizou.
- btime
769041601
- Tempo de inicialização, em segundos desde 1 de Janeiro de
1970.
- sys
- Este diretório, presente desde a versão 1.3.57,
contém um número de arquivos e subdiretórios
correspondente às variáveis do kernel. Estas
variáveis podem ser lidas e algumas vezes modificadas usando-se o
sistema de arquivos proc, e usando a chamada ao sistema
sysctl(2). Atualmente estão presentes os
subdiretórios kernel, net, vm e cada um
contém diversos arquivos e subdiretórios.
- kernel
- Contém os arquivos domainname, file-max,
file-nr, hostname, inode-max, inode-nr,
osrelease, ostype, panic, real-root-dev,
securelevel, version. com funções bastante
claras para o nome.
O arquivo somente para leitura file-nr fornece o
número de arquivos atualmente abertos.
O arquivo file-max fornece o número máximo de
arquivos abertos que o kernel pode administrar. Caso 1024 não seja
suficiente, pode-se tentar o comando
echo 4096 > /proc/sys/kernel/file-max
Similarmente, os arquivos inode-nr e inode-max
indicam o número atual e o número máximo de inodes.
Os arquivos ostype, osrelease, e version
fornecem informações retiradas de /proc/version.
O arquivo panic fornece acesso para leitura e
gravação da variável do kernel panic_timeout.
Caso seja igual a zero, o kernel irá testar esta variável
sucessivamente; caso seja diferente de zero indica que o kernel deve se auto
reinicializar após o número de segundos indicado.
O arquivo securelevel parece sem significado no momento - o
superusuário tem todos os recursos do sistema.
- uptime
- Este arquivo contém dois números: o tempo de atividade do
sistema em segundos e o tempo gasto com o processamento de processos em
segundos.
- version
- Identifica a versão do kernel que está sendo executada. Por
exemplo:
Linux versão 1.09 (quinlan@phaze) #1 Dom Nov 19 01:51:54 EDT 1998.
cat(1), find(1), free(1), mount(1), ps(1), tr(1), uptime(1),
readlink(2), mmap(2), chroot(2), syslog(2), hier(7), arp(8), dmesg(8),
netstat(8), route(8), ifconfig(8), procinfo(8) e muito mais
Este texto está em razoável conformidade com o
kernel 1.3.11. Por favor atualize caso necessário.
Última atualuzação no Linux 1.3.11.
Note que muitas cadeias de caracteres (por exemplo o ambiente e a
linha de comando) estão no formato interno, com subcampos separados
por bytes contendo o caracter nulo. Pode-se tornar as
informações mais claras caso se utilize od -c ou
tr "\000" "\n" para acessá-las.
Esta página de manual não é completa e
possivelmente contenha alguns erros, e precisa ser atualizada
freqüentemente.
O sistema de arquivos /proc pode gerar problemas de
segurança em processos executados com chroot(2). Por exemplo,
se /proc é montado na hierarquia chroot, um
chdir(2) para /proc/1/root retornará para o raiz
original do sistema de arquivos. Isso pode ser considerada uma facilidade ao
invés de um erro, uma vez que o Linux não suporta a chamada
fchroot(2).
André L. Fassone Canova
<lonelywofl@blv.com.br> (tradução)
Carlos Augusto Horylka <horylka@conectiva.com.br>
(revisão)