gpt4 book ai didi

c - 如何在 Linux pthreads 中设置线程的名称?

转载 作者:IT老高 更新时间:2023-10-28 12:32:39 29 4
gpt4 key购买 nike

有没有办法在 Linux 中设置线程的名称?

我的主要目的是在调试时会有所帮助,如果该名称通过例如暴露出来也很好。 /proc/$PID/task/$TID/...

最佳答案

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

这些接口(interface)在其他一些 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);

正如您所见,它在 POSIX 系统之间并非完全可移植,但据我所知,它在 linux 中应该是一致的。除了 Mac OS X(您只能在线程内执行此操作)之外,其他的至少很容易适应跨平台代码。

来源:

关于c - 如何在 Linux pthreads 中设置线程的名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2369738/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com