en RH Linux, cada pthread se correlaciona con un pid, que se puede supervisar en herramientas como htop. pero ¿cómo puedo obtener el pid de un hilo? getpid() simplemente devuelve el pid del hilo principal.Cómo obtener pid de pthread
Respuesta
puede ser llamado para devolver el identificador del subproceso de llamada.
También PID es Id de proceso, Un hilo tiene ID de hilo no PID. Todos los hilos que se ejecutan en el mismo proceso tendrán el mismo PID.
Al igual que la votación negativa es porque lo que dices es incorrecto. De hecho, los hilos de Linux pueden estar representados por un pid, ya que son procesos ligeros. De hecho, la siguiente función existe en Linux unistd.h: pid_t gettid (void).Windows, por otro lado, tiene verdaderos identificadores de hilos independientes. – ThreeBit
Un PID es una ID de proceso, no una ID de subproceso. Los hilos que se ejecutan en el mismo proceso, obviamente, todos estarán asociados con el mismo PID.
Como pthreads intenta ser portable, no puede obtener el ID del subproceso subyacente del SO directamente. Incluso es posible que no haya un hilo del sistema operativo subyacente.
O más bien, dado que los hilos NPTL ya no son registrado como procesos. –
creo que la función que busca es pthread_self
hilos tienen TID (threadIds), y todos los hilos corren en el mismo proceso (PID). Por lo tanto, todos los subprocesos deben tener el mismo pid suponiendo que se crean en el mismo proceso, pero tendrán diferentes tids.
pthread_self() da tid, y getpid() obtiene el pid.
Hay dos valores de subproceso que se confunden. pthread_self() devolverá la identificación del hilo POSIX; gettid() devolverá la identificación del hilo del sistema operativo. El último es específico de Linux y no se garantiza que sea portátil, pero probablemente sea lo que realmente está buscando.
EDITAR Como notas PlasmaHH, gettid()
se llama a través de syscall()
. Desde la página syscall()
hombre:
#define _GNU_SOURCE
#include <unistd.h>
#include <sys/syscall.h>
#include <sys/types.h>
int
main(int argc, char *argv[])
{
pid_t tid;
tid = syscall(SYS_gettid);
}
Tenga en cuenta que gettid() no tiene envoltorio glibc y necesita ser llamado a través de syscall() – PlasmaHH
@ PlasmaHH - De acuerdo, debería agregar eso. Fortuitamente, la página del hombre syscall lo usa como un ejemplo. – Duck
gettid() es un poco [controvertido] (http://airlied.livejournal.com/74826.html) –
pthread_self hace no obtener el TID. Produce un identificador o puntero de tipo pthread_t para su uso en funciones pthread.
ver aquí por ejemplo lo que podría devolver un programa de mundo real:
En realidad pthread_self
retorno pthread_t
y no una ID del tema entero se puede trabajar con la siguiente función de ayuda le conseguirá que, en una forma portátil en diferentes sistemas POSIX.
uint64_t gettid() {
pthread_t ptid = pthread_self();
uint64_t threadId = 0;
memcpy(&threadId, &ptid, std::min(sizeof(threadId), sizeof(ptid)));
return threadId;
}
- 1. obtener PID de paramiko
- 2. Obtener el nombre de PID?
- 3. ¿Cómo obtener el PID infantil en C?
- 4. obtener pid del proceso hijo
- 5. Android obtener PID de otras aplicaciones
- 6. Obtener PID de MS-Word ApplicationClass?
- 7. ¿Cómo funciona pthread?
- 8. ¿Cómo obtener el PID de la tarea de rake actual?
- 9. Obtener nombre del proceso por PID
- 10. ¿Cómo obtener pid de mi comando make en el Makefile?
- 11. Cómo obtener el PID de un proceso en una tubería
- 12. Cómo obtener el pid de comando ejecutando con sudo
- 13. Android - ¿Cómo obtener el processName o packageName utilizando PID?
- 14. ¿Cómo obtener el estado del proceso usando pid?
- 15. ¿Cómo obtener PID desde la función PHP exec() en Windows?
- 16. ¿Cómo se implementa pthread en Linux kernel 3.2?
- 17. pthread (fallo de segmentación)
- 18. obtener la ruta completa de un PID usando Delphi
- 19. Obtener PID de la aplicación actualmente en ejecución
- 20. conceptos pthread en Linux
- 21. Usando pthread en C++
- 22. Convierta un PID de Cygwin en un PID de Windows
- 23. pthread en una clase
- 24. Obtener el nombre del proceso de pid o manejar
- 25. IIS grupo de aplicaciones PID
- 26. Esperando al pid de Ruby pid para salir
- 27. Tracing pthread scheduling
- 28. autoconf con -pthread
- 29. funciones pthread "_np" sufijo
- 30. PThread vs boost :: thread?
[Linux 2.6 LinuxThreads reemplazados con NPTL] (http://drdobbs.com/open-source/184406204), Linux ahora sigue POSIX y correctamente devuelve el mismo PID para cada hilo. –
Debería considerar "aceptar" las respuestas que encuentre útiles. –
Steve-o: Tal vez, pero Linux crea un proceso separado para cada hilo (cada hilo obtiene su propio/proc/, donde es diferente del hilo/proceso principal) –
Rahly