Tengo una aplicación Java donde se crean algunos subprocesos (a través de new Thread()
). Utilizando ps
puedo ver que tienen diferentes ID de hilo (columna LWP) y me gustaría obtener esos ID desde la aplicación Java.Obtención del ID de subproceso para subprocesos de Java en Linux
En la mayoría de las publicaciones relacionadas con este tema que he encontrado (por ejemplo, this one), la solución es usar ManagementFactory.getRuntimeMXBean().getName()
.
Usando ese método, sin embargo, me da el PID del hilo principal (incluso si lo llamo desde uno de los hilos), por lo que realmente no está resolviendo mi problema.
¿Hay alguna forma de obtener el ID de hilo para cada Thread
creado por una aplicación?
¿Sería posible utilizar JNI para lograrlo? Si de alguna manera pudiera interactuar con una función C donde pudiera llamar al syscall(__NR_gettid)
, eso podría resolver mi problema. Realmente no me importa la portabilidad, por lo que estoy totalmente de acuerdo con una solución que solo funcionaría para una máquina Linux.
ACTUALIZACIÓN: He resuelto mi problema usando JNI. Los detalles se explican en mi respuesta. Gracias a todos por sus sugerencias/comentarios.
Java rosca pueden no corresponder a un hilo real en el sistema operativo. – nhahtdh
@nhahtdh No estoy 100% seguro de cómo los hilos de Java se correlacionan con los hilos de Linux, pero al menos en mi sistema, tienen un ID de hilo dado como lo hubiera hecho pthread. Como dije, realmente no estoy buscando una solución portátil. – betabandido
@betabandido: Entonces, ¿has intentado implementar esa función JNI?¿O se supone que debemos hacer eso por ti? –