NOME
proc − pseudo sistema de arquivos de informações de processos.
DESCRIÇÃO
/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.
rss %u |
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.
VEJA TAMBÉM
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
EM CONFORMIDADE COM
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.
DICAS
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.
PROBLEMAS
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).
TRADUZIDO POR LDP-BR em 21/08/2000.
André L. Fassone Canova <lonelywofl [AT] blv.br> (tradução) Carlos Augusto Horylka <horylka [AT] conectiva.br> (revisão)