¿/ Proc / contiene tid?

Sep 07 2020

Tengo ID de proceso 1234. Este proceso contiene ID de hilo 1235.

Cuando uso ls -l /proc, veo solo el pid (1234) pero cuando abro el archivo de estado del hilo usando cat /proc/1235/statusPuedo ver datos.

¿Porqué es eso?

¿Puedo acceder con código C directamente con tid? /proc/1235/memsin conocer la identificación del proceso?

Respuestas

7 StephenKitt Sep 07 2020 at 18:58

Sí, /proc"contiene" entradas de directorio para identificadores de subprocesos así como identificadores de procesos, pero solo estos últimos están enumerados por getdents, por lo que lssolo muestra los identificadores de procesos. Esto se describe en man 5 proc, en la sección "Descripción general", desde la versión 5.00 del proyecto de páginas de manual :

subdirectorios / proc / [pid]

Los subdirectorios / proc / [pid] son visibles cuando se itera a través de / proc con getdents(2)(y por lo tanto son visibles cuando se usa ls(1)para ver el contenido de / proc ).

subdirectorios / proc / [tid]

Los subdirectorios / proc / [tid] no son visibles cuando se itera a través de / proc con getdents(2)(y por lo tanto no son visibles cuando se usa ls(1)para ver el contenido de / proc ).

¿Porqué es eso?

Sospecho que es para preservar la compatibilidad con versiones anteriores (para programas escritos antes de que existieran subprocesos en su forma actual en Linux) y para limitar los problemas de escalabilidad.

¿Puedo acceder con código C directamente con tid? /proc/1235/memsin conocer la identificación del proceso?

Sí, si conoces el tid puedes acceder /proc/${tid}directamente, sin pasar por el pid.