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.

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@blv.com.br> (tradução) Carlos Augusto Horylka <horylka@conectiva.com.br> (revisão)