/ Proc / contém tid?
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
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.