Man page - pthread_setname_np(3)

Packages contains this manual

Available languages:

en fr ja ru ro

Manual

PTHREAD_SETNAME_NP

名 前
書 式
説 明
返 り 値
エ ラ ー
バ ー ジ ョ ン
属 性
準 拠
注 意

プ ロ グ ラ ム の ソ ー ス
関 連 項 目
こ の 文 書 に つ い て

名 前

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) を 参 照 。

Image grohtml-30204-1.png

準 拠

こ れ ら の 関 数 は 非 標 準 の 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.
^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 プ ロ ジ ェ ク ト の リ リ ー ス 5.10 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は https://www.kernel.org/doc/man-pages/ に 書 か れ て い る 。