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

How to print thread id of all threads a process on linux has

本文关键字:线程 拥有 id 进程 何打印 打印 linux      更新时间:2023-10-16

我知道如何在线程上下文中执行时打印线程id,但我想打印进程生成的所有线程id。我需要将其与strace输出关联起来进行调试。

如何获取当前线程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中的目录名。

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