/ Proc / contém tid?

Sep 07 2020

Tenho a identificação de processo 1234. Este processo contém a identificação de thread 1235.

Quando eu uso ls -l /procvejo apenas o pid (1234), mas quando eu abro o arquivo de status do thread usando cat /proc/1235/statusposso ver os dados.

Por que é que?

Posso acessar com o código C diretamente com o tid? /proc/1235/memsem saber o id do processo?

Respostas

7 StephenKitt Sep 07 2020 at 18:58

Sim, /proc“contém” entradas de diretório para identificadores de thread e identificadores de processo, mas apenas os últimos são enumerados por getdents, portanto, lsmostra apenas identificadores de processo. Isso é descrito na man 5 procseção "Visão geral", desde a versão 5.00 do projeto de páginas de manual :

subdiretórios / proc / [pid]

Os subdiretórios / proc / [pid] são visíveis ao iterar por meio de / proc com getdents(2)(e, portanto, são visíveis quando alguém usa ls(1)para visualizar o conteúdo de / proc ).

subdiretórios / proc / [tid]

Os subdiretórios / proc / [tid] não são visíveis ao iterar por meio de / proc com getdents(2)(e, portanto, não são visíveis quando alguém usa ls(1)para visualizar o conteúdo de / proc ).

Por que é que?

Suspeito que seja para preservar a compatibilidade com versões anteriores (para programas escritos antes que os threads existissem em sua forma atual no Linux) e para limitar os problemas de escalabilidade.

Posso acessar com o código C diretamente com o tid? /proc/1235/memsem saber o id do processo?

Sim, se você conhece o tid pode acessar /proc/${tid}diretamente, sem passar pelo pid.