參考文章: Name your threads
man 2 prtcl 說 prctl(PR_SET_NAME, char*) 會改變 process name, 但是它其實改的是 thread name。使用 gdb 的 info thread 會顯示 thread name, 這對於除錯 multi-thread 很有幫助。需要注意的是, 小心別改到 main thread 的名稱, 避免其它相關 kill 指令或自己寫的 script 失效。
2012-11-25 更新
經 Scott 提醒, 使用 pthread_setname_np(pthread_t, const char*) 更頗當, 且可用來設別的 thread 的名字。注意參數是 pthread_t 不是 tid, 還有不知為何, Ubuntu 12.04 下沒有它的 man page, 但 /usr/include/pthread.h 有它的宣告, 且編譯連結試用後, 也沒有問題。
要設目前 thread 的名字可用:
回覆刪除r = pthread_setname_np(pthread_self(), "io-thread");
assert(r == 0);
很多人 thread 的命名很長 e.g. MySuperLongAndTediousFactoryImplProviderSingletonFacadeTread,會超過 Linux 下 thread 名 16 個字長度限制。 pthread_setname_np() 會傳回 ERANGE。