如何在linux中读取正在运行的进程的线程组id

如何在linux中读取正在运行的进程的线程组id,linux,multithreading,operating-system,Linux,Multithreading,Operating System,在linux中,当进程运行时,它调用pthread_create。这将导致进程生成具有相同PID但不同线程组ID的线程。如何查询此新线程的线程组ID 注意:我无法通过从源代码添加一些日志来读取它。系统上有什么我可以读取的信息吗?例如,在/proc?中的某些位置,“转到”文件将是/proc/PID/status。您想知道的关于Linux进程的大多数信息通常都在那里。一个随机示例(实际线程组id为Tgid或NStgid,它们通常相同,缺少容器环境): #cat/proc/8646/status Na

在linux中,当进程运行时,它调用pthread_create。这将导致进程生成具有相同PID但不同线程组ID的线程。如何查询此新线程的线程组ID

注意:我无法通过从源代码添加一些日志来读取它。系统上有什么我可以读取的信息吗?例如,在/proc?

中的某些位置,“转到”文件将是
/proc/PID/status
。您想知道的关于Linux进程的大多数信息通常都在那里。一个随机示例(实际线程组id为Tgid或NStgid,它们通常相同,缺少容器环境):

#cat/proc/8646/status

Name:   udevd
Umask:  0022
State:  S (sleeping)
Tgid:   8646
Ngid:   0
Pid:    8646
PPid:   1584
TracerPid:      0
Uid:    0       0       0       0
Gid:    0       0       0       0
FDSize: 64
Groups:
NStgid: 8646
NSpid:  8646
NSpgid: 1584
NSsid:  1584
// skipped

可能相关,因为它执行类似的内省:为了完整性,手册页似乎没有讨论线程组id。我没有访问源代码修改的权限。您好,我只能看到一个Tgid和一个NStgid,尽管我在主程序中生成了两个子线程。每个应用程序都有一个Tgid,除非您对
clone
执行特殊操作。这就是为什么它被称为“组id”。我突然想到你的术语可能不正确。无论如何,如果要查找程序的所有正在运行的线程,这些线程将显示在
/proc/PID/task
子目录中,该子目录将显示所有多线程应用程序。您可以列出该子目录,比较
状态
文件,并了解PID、PPID和TGID的工作方式。是。我已经找到了。如果你能用这个编辑答案。我会接受的。