Как назвать поток в Linux?
У меня многопоточное приложение Linux, написанное на C/С++. У меня есть выбранные имена для моих потоков. Чтобы помочь отладке, я бы хотел, чтобы эти имена были видны в GDB, "top" и т.д. Возможно ли это, и если да, то как?
(Существует много причин чтобы узнать имя потока. Сейчас я хочу знать, какой поток занимает 50% CPU (как сообщает "top",). И при отладке мне часто нужно переключиться на другой поток - в настоящее время мне нужно сделать "thread apply all bt
", а затем просмотреть страницы вывода backtrace, чтобы найти нужный поток).
Решение для Windows находится здесь; что такое Linux?
Ответы
Ответ 1
Posix Threads?
Это, очевидно, не будет компилироваться, но это даст вам представление о том, куда идти на охоту. Я даже не уверен в его правильной команде PR_
, но я думаю, что это так. Это было время...
#include <sys/prctl.h>
prctl(PR_SET_NAME,"<null> terminated string",0,0,0)
Ответ 2
Если вы используете библиотеку, например ACE, Thread имеет способ указать имя потока при создании нового потока.
BSD Unix также имеет вызов pthread_set_name_np.
В противном случае вы можете использовать prctl, как указано Fusspawn.