【问题标题】:How to read the thread group id of a running process in linux如何在linux中读取正在运行的进程的线程组id
【发布时间】:2018-03-22 12:52:52
【问题描述】:

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

注意:我无法通过从源代码中添加一些日志来阅读它。系统上是否有任何我可以阅读以获取这些信息的内容?例如,/proc 中的某个位置?

【问题讨论】:

标签: linux multithreading operating-system


【解决方案1】:

“转到”文件将是 /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

【讨论】:

  • 嗨,我只能看到一个 Tgid 和一个 NStgid,尽管我在主程序中生成了两个子线程。
  • 每个应用程序都有一个 Tgid,除非您使用 clone 做一些特别的事情。这就是为什么它被称为“组 ID”。
  • 我突然想到您的术语可能不正确。无论如何,如果您想找到一个程序的所有正在运行的线程,这些将在/proc/PID/task 子目录中可见,该子目录将出现在所有多线程应用程序中。您可以列出该子目录,比较 status 文件并找出 PID、PPID 和 TGID 的工作原理。
  • 是的。我已经发现了。如果你可以用这个编辑答案。我会接受的。
猜你喜欢
  • 1970-01-01
  • 2015-04-29
  • 1970-01-01
  • 2018-04-27
  • 2015-05-10
  • 2013-04-23
  • 2016-05-23
  • 1970-01-01
  • 2014-02-01
相关资源
最近更新 更多