No Linux:
ls -l /proc/*/task/*/fd
Ao contrário de lsof
, ele lista apenas os descritores de arquivos, não os arquivos mmap, os diretórios raiz e atuais.
Como exibir descritores de arquivos abertos com ID de thread sem usar lsof
?
Eu sei que existe uma pergunta semelhante, mas a resposta não inclui detalhes do tópico.
No Linux:
ls -l /proc/*/task/*/fd
Ao contrário de lsof
, ele lista apenas os descritores de arquivos, não os arquivos mmap, os diretórios raiz e atuais.
Além das respostas dadas, vale a pena mencionar que, no Linux, todos os encadeamentos iniciados por um processo geralmente compartilham o mesmo conjunto de descritores de arquivos. Assim, ambos:
ls /proc/$parent_pid/task/$task/fd
e
ls /proc/$parent_process/fd
normalmente produz o mesmo resultado, o que implica que os processos filhos herdam os descritores de arquivos referenciados por seus pais. O manual 'lsof', na verdade, especifica isso também sob a documentação da opção -K:
"In general threads and tasks inherit the files of the caller, but may close some and open others, so lsof always reports all the open files of threads and tasks."
Portanto, para eliminar qualquer possível ambigüidade (talvez criada pelas respostas anteriores), listar /proc/$parent_pid/$task/fd
não garante que $ task seja o encadeamento que refina os IDs do descritor de arquivo nesse diretório. Se você precisa de uma maneira confiável de dizer qual encadeamento abriu um descritor de arquivo específico, você pode strace
o programa rastrear chamadas do sistema como open()
, que requerem que o kernel atribua um descritor de arquivo.
Bem, você pode inspecionar /proc/TID/fd....
Não entendi qual é o problema aqui.
Tags linux file-descriptors