PTHREAD_SETNAME_NP

Section: Linux Programmer's Manual (3)
Updated: 2020-11-01
Index JM Home Page
 

名前

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,
                       char *name, size_t len);

-pthread を付けてコンパイルとリンクを行う。  

説明

デフォルトでは、 pthread_create() で作成されたすべてのスレッドはプログラム名を継承する。 pthread_setname_np() 関数を使うとスレッドに固有の名前を設定することができる。 スレッド固有の名前はマルチスレッドアプリケーションのデバッグに便利である。 スレッド名は意味のある C 言語の文字列である。 その長さは 16 文字に限定されており、 終端のヌルバイト ('\0') も 16 文字に含まれる。 thread 引数で名前を変更するスレッドを指定する。 name には新しい名前を指定する。

pthread_getname_np() 関数を使うと、 スレッド名を取得することができる。 thread 引数は名前を取得するスレッドを指定する。 バッファー name はスレッド名を返すのに使用される。 len には name の大きさをバイトで指定する。 name で指定されたバッファーの大きさは最低でも 16 文字とすべきである。 出力バッファーに返されたスレッド名はヌル終端される。  

返り値

成功すると、これらの関数は 0 を返す。 エラーの場合、0 以外のエラー番号を返す。  

エラー

pthread_setname_np() は以下のエラーで失敗する場合がある。
ERANGE
name で指定された文字列の長さが、許可されている上限を超えている。

pthread_getname_np() は以下のエラーで失敗する場合がある。

ERANGE
name と len で指定されたバッファーが、 スレッド名を格納するには短かすぎる。

/proc/self/task/[tid]/comm のオープンに失敗した場合、 これらの関数は open(2) で説明されているエラーのいずれかで失敗する。  

バージョン

これらの関数は glibc バージョン 2.12 で初めて登場した。  

属性

この節で使用されている用語の説明については、 attributes(7) を参照。
インターフェース 属性 値
pthread_setname_np(), pthread_getname_np() Thread safety MT-Safe

 

準拠

これらの関数は非標準の GNU による拡張である。 そのため、名前に "_np" (nonportable; 移植性がない) という接尾辞が 付いている。  

注意

pthread_setname_np() は内部で /proc ファイルシステムのスレッド固有の comm ファイル (/proc/self/task/[tid]/comm) に書き込みを行う。 pthread_getname_np() はこのファイルから読み出しを行う。  

例

以下のプログラムは、 pthread_setname_np() と pthread_getname_np() の使用例を示している。

以下のシェルセッションは、このプログラムの実行例である。

$ ./a.out Created a thread. Default name is: a.out The thread name after setting it is THREADFOO. haZ # 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 プロジェクトのリリース 5.10 の一部である。プロジェクトの説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。

関連キーワード

pthread   thread   スレッド   getname   setname   errExitEN   proc   comm   define   create   バッファー   task   固有   argc   argv   printf   終端   self   Created   Default   after   setting   program   errno   exit

Linux マニュアル 一覧

関連するコマンド・関数

pthread_getname_np.3   pthread_self.3   pthread_sigmask.3   gettid.2   pthread_getcpuclockid.3   pthread_join.3
 

Index

名前
書式
説明
返り値
エラー
バージョン
属性
準拠
注意
例
プログラムのソース
関連項目
この文書について

This document was created by man2html, using the manual pages.
Time: 04:39:31 GMT, October 11, 2026