如何在linux上打印一个进程的所有线程的线程ID
问题描述:
我知道如何在线程的上下文中执行时打印线程ID,但我想打印进程产生的所有线程ID。我需要这个与strace输出关联来进行调试。如何在linux上打印一个进程的所有线程的线程ID
如何获得当前线程ID:
pid_t x =系统调用(__ NR_gettid);
答
从https://unix.stackexchange.com/a/901/134332
对于每个过程中,大量的信息在哪里/proc/12345
12345
是进程ID是可用的。有关每个线程的信息,请参阅/proc/12345/task/67890
,其中67890
是内核线程ID。这是ps,top和其他工具获取信息的地方。
答
您可以阅读虚拟/proc
文件系统。遍历/proc/self/task
中的dirname。
if(DIR* dir = opendir("/proc/self/task")) {
while (dirent* entry = readdir(dir))
if (entry->d_name[0] != '.')
std::cout << entry->d_name;
closedir(dir);
}