我可以在pthreads / Linux中设置线程的名称吗?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (324)

有什么方法可以在Linux中设置线程的名称?

提问于
用户回答回答于

通过prctl(2)选项使用该功能PR_SET_NAME

由于线程在Linux上是轻量级进程(LWP),因此在这种情况下一个线程就是一个进程。

你可以看到线程名用ps -o cmd/proc/$PID/stat()

4223 (kjournald) S 1 1 1 0...
用户回答回答于

从glibc v2.12开始,你可以使用pthread_setname_nppthread_getname_np设置/获取线程名称。

这些接口在一些其他POSIX系统(BSD,QNX,Mac)上可用,形式稍有不同。

设置名称就像这样:

#include <pthread.h>  // or maybe <pthread_np.h> for some OSes

// Linux
int pthread_setname_np(pthread_t thread, const char *name);

// NetBSD: name + arg work like printf(name, arg)
int pthread_setname_np(pthread_t thread, const char *name, void *arg);

// FreeBSD & OpenBSD: function name is slightly different, and has no return value
void pthread_set_name_np(pthread_t tid, const char *name);

// Mac OS X: must be set from within the thread (can't specify thread ID)
int pthread_setname_np(const char*);

你还可以这样用:

#include <pthread.h>  // or <pthread_np.h> ?

// Linux, NetBSD:
int pthread_getname_np(pthread_t th, char *buf, size_t len);
// some implementations don't have a safe buffer (see MKS/IBM below)
int pthread_getname_np(pthread_t thread, const char **name);
int pthread_getname_np(pthread_t thread, char *name);

// FreeBSD & OpenBSD: dont' seem to have getname/get_name equivalent?
// but I'd imagine there's some other mechanism to read it directly for say gdb

// Mac OS X:
int pthread_getname_np(pthread_t, char*, size_t);

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动