Qu'est ce que pthread_t ?
Bonjour à tous ! (LINUX CODE - Fedora Core)
J'ai besoin de récupérer l'ID d'un thread, j'utilise donc pthread_self(), mais cette fonction me retourne un pthread_t ... J'ai beau le caster en ce que je veux, ce soit disant ID de thread est complétement pourri. L'ID qui m'interesse est celui qui est affiché lorsqu'on fait un ps systéme ...
J'ai reussi à recup cet ID en faisant une grosse bidouille, en gros j'ai un
typedef unsigned long int pthread_t;
J'ai dédui que ca pouvait être un pointeur et bingo !
Code:
1 2
| unsigned short lThreadID;
memcpy(&lThreadID, (void*)(pthread_self()+72), sizeof(unsigned short)); |
Et la j'ai bien mon thread ID correct, je retrouve aussi le thread ID du pére un peu plus loin dans la mémoire.
J'en ai donc deduis que pthread_t qui est défini comme un unsigned long est en réalité un pointeur sur une struct, mais je tape direct dans la mémoire c crade, j'aimerai pouvoir caster mon unsigned long comme un pointeur sur cette struct mais je ne sais pas du tout de quelle struct il s'agit et je ne trouve AUCUNE info la dessus sur le net :(
A l'aide !
L'utilité de connaître le ThreadID dans son code
Salut Jedaï,
ps permet aussi d'afficher les ThreadID, essaye ça:
Code:
ps axmo command,tid
Voici un résumé de mon application, et de l'utilité d'obtenir le ThreadID :
Au lancement, mon application initialise tout un tas de pthreads. Puis, cette application reste active pendant des jours et des jours...
Il est utile de jeter un oeuil régulièrement (ou en cas de pépin) sur le serveur.
La commande ps (du style "ps axmo fname,thcount,state,tid,eip,%mem,%cpu,cputime,policy,nice,etime") permet assez facilement d'identifier le thread qui consomme exagérément du CPU et/ou de la mémoire. Mais les pthreads sont identifiés par un ID (et non pas par un nom comme les kthreads).
Il est alors nécessaire de faire le lien entre le code exécuté par les pthreads et leur identifiant (ID).
(;-)liver