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

我的主要目的是,它在调试时会很有帮助,而且如果通过例如/proc/$PID/task/$TID/...公开这个名称也很好

推荐答案

prctl(2)功能与选项PR_SET_NAME一起使用(参见the docs).

请注意,旧版本的文档有点令人困惑.他们说

设置调用进程的进程名称

但是由于线程在Linux上是轻量级进程(LWP),因此在本例中一个线程就是一个进程.

您可以看到带有ps -o cmd或以下的线程名称:

cat /proc/$PID/task/$TID/comm

或介于cat /proc/$PID/task/$TID/stat()之间:

4223 (kjournald) S 1 1 1 0...

或者从GDB info threads的双引号中:

* 1    Thread 0x7ffff7fc7700 (LWP 6575) "kjournald" 0x00007ffff78bc30d in nanosleep () at ../sysdeps/unix/syscall-template.S:84                                                                                  

C++相关问答推荐

从带有句点的文件中读取数字(整数和小数)作为分隔符

在 c 标头中使用 c++ 标头中的枚举类

使用 printf() 输出正确的小数位数?

C 编程语言中有范围运算符吗?

使用 .* 宽度说明符调用 sprintf 时出现奇怪的警告

为什么我不能将动态函数指针传递给 atexit()?

为什么 memchr() 将 void 指针作为输入?

从数组伪排序

可能的堆栈粉碎?

如何禁用特定功能的堆栈金丝雀?

是否有更高性能的 powf(10,floorf(log10f(x))) 实现

你怎么能告诉一台计算机它正在添加而不在 Assembly 中添加 addl

如何正确拦截 Linux 内核 5.* 中的系统调用?

K&R C 编程语言书中哈希表的有效性

假设指向同一个变量的两个指针是非法的/UB,为什么 C 编译器不能优化更改 const 指针的值?

numpy 怎么这么快?

在结构数组的末尾需要空括号“{}”是什么?

程序是 32 位还是 64 位意味着什么?

为什么 C 和 C++ 允许表达式 (int) + 4*5?

为什么不自动假定#pragma 一次?