Comment obtenir le pid de pthread
en RH Linux, tous les pthread est la cartographie d'un pid, qui peuvent être surveillés dans des outils tels que htop. mais comment puis-je obtenir le pid d'un fil? getpid() il suffit de retourner le pid du thread principal.
source d'informationauteur Shawn
Vous devez vous connecter pour publier un commentaire.
pthread_self();
Peuvent être appelés à retourner l'ID du thread appelant.
Aussi PID est l'Id du processus, Un thread a l'Id de thread ne PID. Tous les threads s'exécutant dans le même processus sera le même PID.
Il y a deux valeurs de thread que se confondre. pthread_self() sera de retour l'POSIX thread id; gettid() sera de retour l'OS id de thread. Ce dernier est spécifique à linux et ne pas être portable, mais probablement ce que vous recherchez vraiment.
MODIFIER Comme PlasmaHH notes,
gettid()
est appelé via lesyscall()
. À partir de lasyscall()
homme page:Un PID est un ID de Processus, pas un ID de thread. Les Threads en cours d'exécution sur le même processus sera bien évidemment tous être associés à la même valeur de PID.
Parce que pthreads essaie d'être portable, vous ne pouvez pas obtenir l'ID de l'OS sous-jacent fil directement. Il est même possible qu'il n'y a pas un OS sous-jacent fil.
pthread_self ne pas obtenir le tid. il proviedes une poignée ou un pointeur de type pthread_t pour une utilisation dans des fonctions pthread.
voir ici pour un exemple de ce qu'est un monde réel programme de retour:
http://www.c-plusplus.de/forum/212807-full
Fait
pthread_self
retourpthread_t
et pas un integer id de thread, vous pouvez travailler avec, la fonction d'assistance suivante, vous obtiendrez que de façon portable à travers les différents systèmes POSIX.Je pense que la fonction que vous cherchez est pthread_self
Les Threads ont tid (threadIds), et tous les threads s'exécutent dans le même processus (pid). Donc, votre fils devrait tous avoir le même pid en supposant qu'ils sont créés dans le même processus, mais ils ont des tid.
pthread_self() donne tid, et getpid() retourne le pid.