如何打印linux上进程的所有线程的线程ID

时间:2016-07-26 16:19:30

标签: c++ linux multithreading

我知道如何在线程的上下文中执行时打印线程ID,但我想打印进程已生成的所有线程ID。我需要这个与strace输出相关联以进行调试。

如何获取当前线程ID:
 pid_t x =系统调用(__ NR_gettid);

2 个答案:

答案 0 :(得分:1)

来自https://unix.stackexchange.com/a/901/134332

对于每个流程,/proc/12345中提供了大量信息,其中12345是流程ID。有关每个线程的信息可在/proc/12345/task/67890中获得,其中67890是内核线程ID。这是ps,top和其他工具获取信息的地方。

答案 1 :(得分:1)

您可以阅读虚拟/proc文件系统。迭代/proc/self/task中的dirnames。

if(DIR* dir = opendir("/proc/self/task")) {
    while (dirent* entry = readdir(dir))
        if (entry->d_name[0] != '.')
            std::cout << entry->d_name;
    closedir(dir);
}