Est-ce que / proc / contient tid?

Sep 07 2020

J'ai l'ID de processus 1234. Ce processus contient l'ID de filetage 1235.

Lorsque j'utilise, ls -l /procje ne vois que le pid (1234) mais lorsque j'ouvre le fichier d'état du thread en utilisant cat /proc/1235/statusje peux voir les données.

Pourquoi donc?

Puis-je accéder avec le code C directement avec tid? /proc/1235/memsans connaître l'identifiant du processus?

Réponses

7 StephenKitt Sep 07 2020 at 18:58

Oui, /proc«contient» des entrées de répertoire pour les identificateurs de thread ainsi que les identificateurs de processus, mais seuls ces derniers sont énumérés par getdents, donc lsne montre que les identificateurs de processus. Ceci est décrit dans man 5 proc, dans la section «Présentation», depuis la version 5.00 du projet man-pages :

/ proc / [pid] sous-répertoires

Les sous -répertoires / proc / [pid] sont visibles lors de l'itération à travers / proc avec getdents(2)(et sont donc visibles quand on utilise ls(1)pour afficher le contenu de / proc ).

/ proc / [tid] sous-répertoires

Les sous -répertoires / proc / [tid] ne sont pas visibles lors de l'itération dans / proc avec getdents(2)(et ne sont donc pas visibles lorsque l'on utilise ls(1)pour afficher le contenu de / proc ).

Pourquoi donc?

Je soupçonne que c'est pour préserver la rétrocompatibilité (pour les programmes écrits avant que les threads n'existent sous leur forme actuelle sous Linux), et pour limiter les problèmes d'évolutivité.

Puis-je accéder avec le code C directement avec tid? /proc/1235/memsans connaître l'identifiant du processus?

Oui, si vous connaissez la tid, vous pouvez accéder /proc/${tid}directement, sans passer par le pid.