pthread_setname_np, pthread_getname_np :設置/獲取線程的名稱
#define _GNU_SOURCE /* See feature_test_macros(7) */
#include <pthread.h>
int pthread_setname_np(pthread_t thread, const char *name);
int pthread_getname_np(pthread_t thread, char *name, size_t len);
編譯和鏈接需要參數(shù) : -pthread
默認情況下垛叨,所有使用 pthread_create() 創(chuàng)建的線程都繼承程序名稱枣接。 pthread_setname_np() 函數(shù)可用于為線程設置唯一名稱释树,這對于調(diào)試多線程應用程序非常有用茄袖。 線程名稱是一個有意義的 C 語言字符串桥狡,包括終止空字節(jié) ('\0')在內(nèi)缨伊,其長度限制為 16 個字符。 thread 參數(shù)指定要更改名稱的線程缰趋; name 指定新名稱捧杉。
pthread_getname_np() 函數(shù)可用于獲取線程的名稱。 thread 參數(shù)指定線程秘血。 緩沖區(qū)name用于存放返回的線程名稱; len 指定緩沖區(qū)的可用字節(jié)數(shù)评甜。 區(qū)長度至少應為 16 個字符灰粮。 輸出緩沖區(qū)中返回的線程名稱將以空 ('\0')終止。
成功時忍坷,這些函數(shù)返回 0粘舟; 出錯時,它們返回一個非零錯誤號佩研。
pthread_setname_np() 函數(shù)可能會失敗并出現(xiàn)以下錯誤:
ERANGE name 指定的字符串長度超過了允許的限制柑肴。
pthread_setname_np() 函數(shù)可能會失敗并出現(xiàn)以下錯誤:
ERANGE name 和 len 指定的緩沖區(qū)太小,無法容納線程名稱旬薯。
如果這些函數(shù)中的任何一個無法打開 /proc/self/task/[tid]/comm晰骑,則調(diào)用可能會失敗并出現(xiàn) open(2) 中描述的錯誤之一。(見NOTES)
從實現(xiàn)上講绊序,pthread_setname_np()將線程的名稱寫入到了/proc FS的comm文件:/proc/self/task/[tid]/comm.
pthread_getname_np()則是從相同的位置獲取線程名