如何在linux中读取正在运行的进程的线程组id
在linux中,当进程运行时,它调用pthread_create。这将导致进程生成具有相同PID但不同线程组ID的线程。如何查询此新线程的线程组ID 注意:我无法通过从源代码添加一些日志来读取它。系统上有什么我可以读取的信息吗?例如,在/proc?中的某些位置,“转到”文件将是如何在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
/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的工作方式。是。我已经找到了。如果你能用这个编辑答案。我会接受的。