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

问题描述:

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

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

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

对于每个过程中,大量的信息在哪里/proc/1234512345是进程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); 
}