O sistema de arquivos /proc
é virtual - reflete o estado atual dos processos e /proc/$pid/fd
apenas lista os arquivos que o processo mantém em aberto no momento. Se um arquivo ou soquete for fechado, sua entrada em /proc/$pid/fd/
desaparecerá automaticamente. Se o processo sair, o diretório /proc/$pid
inteiro desaparecerá.
Os descritores de arquivo sempre começam em 0 e o kernel sempre atribui o número não negativo mais baixo possível aos descritores de arquivos recém-criados. No entanto, um processo é sempre livre para fechar qualquer descritor de arquivo que tenha - portanto, é totalmente possível que fd/
contenha "buracos"; por exemplo. fd/0 fd/1 fd/3 fd/6
ou similar.
Para processos multithread, /proc/$pid
exibe o estado do thread principal - threads adicionais possuem subdiretórios sob /proc/$pid/task/
(uma tarefa representa um Pthread). No entanto, o POSIX.1 requer que todos os Pthreads dentro de um processo compartilhem os mesmos descritores de arquivos, portanto, o conteúdo de fd/
será o mesmo.