Tempo de vida dos links simbólicos dos descritores de arquivo em / proc / PID / fd /

3

Por quanto tempo os links simbólicos formam os descritores de arquivo em / proc / PID / fd / são mantidos?

Durante a vida completa do processo?

O que acontece quando este é um processo multi-threaded?

Tenho a garantia de que, depois de horas de trabalho, todos os arquivos que foram abertos durante algum momento serão listados aqui? Atualmente, os links aqui são todos numerados de 0 a n, sem nenhum número faltando entre eles. Pode o caso ocorrer que um número está faltando? Ou um arquivo simplesmente desaparece no mesmo ponto, sem indicação de que ele foi aberto?

Tnx.

    
por Zlatko 07.12.2011 / 15:25

1 resposta

6

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.

    
por 08.12.2011 / 15:13

Tags