PTHREAD_SETNAME_NP(3) | Linux Programmer's Manual | PTHREAD_SETNAME_NP(3) |
名前
pthread_setname_np, pthread_getname_np -スレッド名のの設定/取得を行う書式
#define _GNU_SOURCE /* feature_test_macros(7) 参照 */
#include <pthread.h>
int pthread_setname_np(pthread_t thread , const char * name );
int pthread_getname_np(pthread_t thread ,
const char * name , size_t len );
説明
By default, all the threads created using pthread_create() inherit the program name. The pthread_setname_np() function can be used to set a unique name for a thread, which can be useful for debugging multithreaded applications. The thread name is a meaningful C language string, whose length is restricted to 16 characters, including the terminating null byte. The thread argument specifies the thread whose name is to be changed; name specifies the new name.返り値
成功すると、これらの関数は 0 を返す。エラーの場合、0 以外のエラー番号を返す。エラー
pthread_setname_np() は以下のエラーで失敗する場合がある。- ERANGE
- The length of the string specified pointed to by name exceeds the allowed limit.
pthread_getname_np() は以下のエラーで失敗する場合がある。
- ERANGE
- The buffer specified by name and len is too small to hold the thread name.
If either of these functions fails to open /proc/self/task/[tid]/comm, then the call may fail with one of the errors described in open(2).
バージョン
これらの関数は glibc バージョン 2.12 で初めて登場した。準拠
これらの関数は非標準の GNU による拡張である。注意
pthread_setname_np() internally writes to the thread specific comm file under /proc filesystem: /proc/self/task/[tid]/comm. pthread_getname_np() retrieves it from the same location.例
以下のプログラムは、 pthread_setname_np() と pthread_getname_np() の使用例を示している。
$ ./a.out
Created a thread. Default name is: a.out
The thread name after setting it is THREADFOO.
^Z # Suspend the program
[1]+ Stopped ./a.out
$ ps H -C a.out -o 'pid tid cmd comm'
PID TID CMD COMMAND
5990 5990 ./a.out a.out
5990 5991 ./a.out THREADFOO
$ cat /proc/5990/task/5990/comm
a.out
$ cat /proc/5990/task/5991/comm
THREADFOO
プログラムのソース
#define _GNU_SOURCE
#include <pthread.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <stdlib.h>
#define NAMELEN 16
#define errExitEN(en, msg) \
do { errno = en; perror(msg); exit(EXIT_FAILURE);\
} while (0)
static void *
threadfunc(void *parm)
{
sleep(5); // allow main program to set the thread name
return NULL;
}
int
main(int argc, char **argv)
{
pthread_t thread;
int rc;
char thread_name[NAMELEN];
rc = pthread_create(&thread, NULL, threadfunc, NULL);
if (rc != 0)
errExitEN(rc, "pthread_create");
rc = pthread_getname_np(thread, thread_name, NAMELEN);
if (rc != 0)
errExitEN(rc, "pthread_getname_np");
printf("Created a thread. Default name is: %s\n", thread_name);
rc = pthread_setname_np(thread, (argc > 1) ? argv[1] : "THREADFOO");
if (rc != 0)
errExitEN(rc, "pthread_setname_np");
sleep(2);
rc = pthread_getname_np(thread, thread_name,
(argc > 2) ? atoi(argv[1]) : NAMELEN);
if (rc != 0)
errExitEN(rc, "pthread_getname_np");
printf("The thread name after setting it is %s.\n", thread_name);
rc = pthread_join(thread, NULL);
if (rc != 0)
errExitEN(rc, "pthread_join");
printf("Done\n");
exit(EXIT_SUCCESS);
}
関連項目
prctl(2), pthread_create(3), pthreads(7)この文書について
この man ページは Linux man-pages プロジェクトのリリース 3.51 の一部である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。2013-04-02 | Linux |