/proc/ contiene tid?

Sep 07 2020

Ho ID processo 1234. Questo processo contiene ID thread 1235.

Quando lo uso ls -l /procvedo solo il pid (1234) ma quando apro il file di stato del thread usando cat /proc/1235/statusposso vedere i dati.

Perché?

Posso accedere con il codice C direttamente con tid? /proc/1235/memsenza conoscere l'id del processo?

Risposte

7 StephenKitt Sep 07 2020 at 18:58

Sì, /proc"contiene" le voci di directory per gli identificatori di thread e gli identificatori di processo, ma solo questi ultimi sono enumerati da getdents, quindi lsmostra solo gli identificatori di processo. Questo è descritto in man 5 proc, nella sezione "Panoramica", dalla versione 5.00 del progetto man-pages :

/proc/[pid] sottodirectory

Le sottodirectory /proc/[pid] sono visibili durante l'iterazione di /proc con getdents(2)(e quindi sono visibili quando si usa ls(1)per visualizzare il contenuto di /proc ).

/proc/[tid] sottodirectory

Le sottodirectory /proc/[tid] non sono visibili durante l'iterazione di /proc con getdents(2)(e quindi non sono visibili quando si utilizza ls(1)per visualizzare il contenuto di /proc ).

Perché?

Sospetto che sia per preservare la compatibilità con le versioni precedenti (per i programmi scritti prima che esistessero i thread nella loro forma attuale su Linux) e per limitare i problemi di scalabilità.

Posso accedere con il codice C direttamente con tid? /proc/1235/memsenza conoscere l'id del processo?

Sì, se conosci il tid puoi accedere /proc/${tid}direttamente, senza passare dal pid.