2010-07-20 11 views

Respuesta

9

Puedes mirar en /proc/<PID>/task/ (donde <PID> es un ID de proceso) que tendrá un número de subdirectorios, cada uno con el mismo nombre que el ID de hilo de uno de los hilos en esa tarea.

Tenga en cuenta que esto es solo una especie de tiempo real, a menos que "congele" todo el sistema mientras dure, la información que obtenga siempre puede ser obsoleta, porque un proceso puede crear o destruir hilos incluso mientras miras los datos.

3

Creo que ps -L debería hacer el truco.

Aquí está ps .

No estoy seguro si pregunta cómo hacerlo programáticamente, pero en este caso, dado que ps es de código abierto, entonces probablemente pueda echar un vistazo a las fuentes.

+0

sí programmaticaly –

+0

No estoy seguro de en qué idioma voy a implementarlo. –

+0

Estoy seguro de que cualquier idioma que implemente será capaz de llamar a 'ps'. – corsiKa

4

En los Linux modernos, los hilos se parecen mucho a los procesos. Cada hilo tiene un identificador LWP ("proceso ligero"), que se implementa internamente como PID. Sin embargo, si se consulta ese "proceso de peso liviano" (es decir, el hilo) para obtener un PID, el sistema genera el PID del proceso que engendró el hilo (en lugar de LWP). Tenga en cuenta también que si el proceso tiene solo un hilo, su LWP será igual a su PID.

ps es capaz de procesar hilos con -L modificador, como ereOn describió en su answer. Pero debo señalar que ps no es solo para la invocación manual. Tiene capacidades para imprimir la salida de una manera que sea fácil de analizar por otro programa.

El siguiente comando imprimirá procesos ligeros (-o lwp=) y PID (-o pid=) de todos (-A) hilos (-L) en el sistema. Cada cadena representa un hilo, segunda columna es el proceso que lo generó:

$ ps -A -L -o lwp= -o pid= 
... 
27747 27747 
27749 27749 
27750 27750 
27751 27750 
27752 27750 
27755 27750 
27756 27750 
27772 27772 
27858 27858 
30457 30457 
30886 30886 

Muy fácil de analizar con C o C++, no es? Para leer esto desde su programa, puede usar popen o uno de sus C++ equivalents.

Tenga en cuenta que usar ps no es solo más fácil que leer /proc. También es mucho más seguro que el análisis manual del sistema de archivos /proc. ps es un comando POSIX *, está garantizado que funciona; usa /proc bajo Linux, pero eso es detalles internos. Cuando la infraestructura subyacente cambie, ps se reescribirá y seguirá funcionando, mientras que su código, si se escribe según /proc, se romperá.


* Para ser sinceros, POSIX no especifica -L interruptor. Pero en cualquier Linux, que tenga la cadena de herramientas GNU, estará disponible.

Cuestiones relacionadas