2009-04-22 7 views
38

J'ai une application Linux multithread écrit en C/C++. J'ai chosen names for my threads. Pour faciliter le débogage, j'aimerais que ces noms soient visibles dans GDB, "top", etc. Est-ce possible, et si oui, comment?Comment nommer un thread sous Linux?

(Il y a beaucoup de reasons to know the thread name) En ce moment je veux savoir quel thread prend 50% du CPU (comme indiqué par 'top'). Et lors du débogage, je dois souvent passer à un fil différent - actuellement j'ai pour faire "thread apply all bt" puis regardez à travers les pages de la sortie backtrace pour trouver le bon fil).

Le Windows solution is here; quel est le Linux?

+0

question connexe: http://stackoverflow.com/questions/5026531/thread-name-longer-than-15-chars – user9876

Répondre

41

threads Posix?

Cela évidemment ne compile pas, mais il vous donnera une idée de l'endroit où aller à la chasse. Je ne suis même pas sûr que c'est la bonne commande, mais je pense que c'est le cas. Il a été un moment ...

#include <sys/prctl.h> 
    prctl(PR_SET_NAME,"<null> terminated string",0,0,0) 
+6

Cela a fonctionné, merci! La documentation indique que PR_SET_NAME définit le nom du processus; mais cette documentation est erronée - elle définit réellement le nom du thread. Maintenant "top" et "ps -L" montrent le nom du thread. – user9876

+0

Heureux que cela a fonctionné, je n'étais pas sûr si c'était même la bonne constante pour cela, :) – Fusspawn

+0

J'ai toujours identifié les discussions basées sur la fonction de démarrage comme indiqué dans la pile-trace du fil. C'est bon de savoir qu'il existe une alternative propre. – veefu

14

Si vous utilisez une bibliothèque comme ACE le Thread a un moyen de spécifier le nom du fil lors de la création d'un nouveau thread.

Unix BSD a également un appel pthread_set_name_np.

Sinon, vous pouvez utiliser prctl comme mentionné par Fusspawn.

+9

Sous Linux, il s'appelle 'pthread_setname_np' et il a été ajouté dans la glibc 2.11.2. – Nemo

+2

[This] (http://stackoverflow.com/questions/2369738/can-i-set-the-name-of-a-thread-in-pthreads-linux) est, probablement, la réponse la plus détaillée sur le assujettir. –