¿Hay alguna manera de saber, en tiempo real, qué hilos están abiertos y qué aplicación los abrió?¿Cómo enumerar los hilos abiertos por cada aplicación en Linux?
Respuesta
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.
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.
sí programmaticaly –
No estoy seguro de en qué idioma voy a implementarlo. –
Estoy seguro de que cualquier idioma que implemente será capaz de llamar a 'ps'. – corsiKa
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.
- 1. Eliminando todos los hilos abiertos por la aplicación
- 2. En Linux: configure los archivos máximos abiertos en ilimitados. ¿Posible?
- 3. ¿Cómo enumerar los subdirectorios no vacíos en Linux?
- 4. Identificar los archivos abiertos de un proceso particular en Linux
- 5. ¿Por qué VisualVM no muestra hilos de daemon en Linux?
- 6. Cómo enumerar las carpetas vacías en Linux
- 7. ¿Cómo detener los hilos del kernel de Linux en rmmod?
- 8. ¿Cómo cambio el límite de archivos abiertos en Linux?
- 9. C# archivos abiertos con la aplicación por defecto y parámetros
- 10. ¿Cómo se terminan los hilos durante un bloqueo de Linux?
- 11. Encuentra los formularios abiertos en la aplicación de Windows C#
- 12. ¿Cómo enumerar todas las actividades expuestas por una aplicación?
- 13. ¿Cómo busco los búferes abiertos en Vim?
- 14. Distinción entre procesos e hilos en Linux
- 15. archivos de volcado del núcleo en Linux: ¿cómo obtener información sobre los archivos abiertos?
- 16. Linux API para mostrar los procesos en ejecución?
- 17. Listar todos los archivos abiertos
- 18. Enumerar todos los elementos de Llavero en mi aplicación iOS
- 19. ¿Cómo enumerar los módulos importados?
- 20. ¿Por qué los hilos IIS son tan preciados en comparación con los hilos regulares de CLR?
- 21. CUDA que determina los hilos por bloque, bloques por cuadrícula
- 22. cómo se ven pthreads en linux por el programador
- 23. ¿Cómo enumerar los procesos conectados a un segmento de memoria compartida en Linux?
- 24. método de cómo enumerar pasan los parámetros
- 25. ¿Por qué deberías bloquear los hilos?
- 26. Acceso es posible enumerar los valores por '::' en C++
- 27. ¿Cómo newCachedThreadPool reutiliza los hilos?
- 28. PySerial enumerar los puertos
- 29. ¿Cómo puedo obtener una lista con todos los hilos creados por mi aplicación?
- 30. ¿Por qué los hilos se ejecutan en serie en esta aplicación de consola?
¿Qué sistema operativo? – Gianni
Ubuntu generalmente significa Linux :) –
@Nikolai mi mal, totalmente he leído mal las etiquetas, sry. – Gianni