43 votes

Comment nommer un fil sous Linux ?

J'ai une application Linux multithread écrite en C/C++. J'ai noms choisis pour mes fils . Pour faciliter le débogage, j'aimerais que ces noms soient visibles dans GDB, "top", etc. Est-ce possible, et si oui, comment ?

(Il y a beaucoup de raisons de connaître le nom du fil . Pour l'instant, je veux savoir quel thread occupe 50 % de l'unité centrale (comme indiqué par 'top'). Et lors du débogage, j'ai souvent besoin de passer à un autre thread - actuellement, je dois faire " thread apply all bt " puis parcourir des pages de backtrace pour trouver le bon fil).

En La solution Windows est ici ; c'est quoi celui de Linux ?

0 votes

0 votes

D'une certaine manière, le prctl() (et pthread_setname_np() n'a pas fonctionné pour moi. Il a changé le nom de TOUS mes fils de discussion. Donc plutôt inutile. A la place, j'ai dû écrire le nom dans le fichier comm. Voir : stackoverflow.com/questions/68676407/

44voto

Fusspawn Points 1171

Fils Posix ?

Cela ne sera évidemment pas compilé, mais cela vous donnera une idée de l'endroit où aller chasser. Je ne suis même pas sûr que ce soit le bon PR_ commande, mais je pense que c'est le cas. Ça fait un moment...

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

6 votes

Ça a marché, merci ! La documentation indique que PR_SET_NAME définit le nom du processus ; mais cette documentation est erronée - elle définit en fait le nom du processus. Maintenant, "top" et "ps -L" affichent le nom du processus.

0 votes

Content que ça ait marché, je n'étais même pas sûr que ce soit la bonne constante pour ça, :)

0 votes

J'ai toujours identifié les threads en me basant sur la fonction de démarrage telle qu'elle apparaît dans le stack-trace du thread. Il est bon de savoir qu'il existe une alternative propre.

14voto

lothar Points 11904

Si vous utilisez une bibliothèque comme ACE le site Fil conducteur permet de spécifier le nom du fil lors de la création d'un nouveau fil.

BSD Unix a également un pthread_set_name_np appeler.

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

11 votes

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

2 votes

Ce site est, probablement, la réponse la plus détaillée sur le sujet.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X