2009-04-22 11 views
38

Ho un'applicazione Linux multithread scritta in C/C++. Ho chosen names for my threads. Per facilitare il debug, vorrei che questi nomi fossero visibili in GDB, "top", ecc. È possibile, e se sì, come?Come denominare un thread in Linux?

(Ci sono un sacco di reasons to know the thread name. In questo momento voglio sapere quale thread sta prendendo il 50% della CPU (come riportato da 'top') .E quando debugging ho spesso bisogno di passare a un thread diverso - attualmente ho per fare "thread apply all bt" quindi guardare attraverso le pagine di output backtrace per trovare il thread giusto).

Windows solution is here; qual è il Linux?

+0

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

risposta

41

Filetti Posix?

Questo evidentemente non verrà compilato, ma ti darà un'idea di dove andare a caccia. Non sono nemmeno sicuro che sia il comando giusto PR_, ma penso che lo sia. E 'stato un po' ...

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

Ha funzionato, grazie! La documentazione dice che PR_SET_NAME imposta il nome del processo; ma quella documentazione è sbagliata - in realtà imposta il nome del thread. Ora "top" e "ps -L" mostrano il nome del thread. – user9876

+0

Contento che funzionasse, non ero sicuro che fosse anche la Costante giusta per questo, :) – Fusspawn

+0

Ho sempre identificato i thread in base alla funzione di avvio come mostrato nello stack-trace del thread. Bello sapere che c'è un'alternativa pulita. – veefu

14

Se si utilizza una libreria come la ACEThread ha un modo per specificare il nome del thread durante la creazione di un nuovo thread.

BSD Unix ha anche una chiamata pthread_set_name_np.

Altrimenti è possibile utilizzare prctl come menzionato da Fusspawn.

+9

Su Linux si chiama 'pthread_setname_np' ed è stato aggiunto in glibc 2.11.2. – Nemo

+2

[This] (http://stackoverflow.com/questions/2369738/can-i-set-the-name-of-a-thread-in-pthreads-linux) è, probabilmente, la risposta più dettagliata sul soggetto. –

Problemi correlati