table of contents
PROC(5) | Manual do Programador Linux | PROC(5) |
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.
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@blv.com.br> (tradução) Carlos Augusto Horylka <horylka@conectiva.com.br> (revisão)
22/07/1996 |