从 TID 获取 PID 的预制方法

Preformant way to get a PID from a TID

这个问题不是关于 pthread ID,而是关于通常由 gettidptrace 获得的值。

linux内核是否提供任何机制以相对有效的方式从给定的tid中获取线程组id(通常由getpid获取)?不需要 io 或解析的东西?

唯一的方法好像是open/proc/TID/status,read把文件放到一个buffer中,逐行扫描Tgid,然后解析字符串作为无符号整数。

我希望我错过了一个系统调用 returns tgid/pid 给定 pid,即使在某些数据结构中间接返回了 id。

好像没有这个系统调用。只能从 /proc 检索信息,您当前的解决方案看起来是最有效的方法。

只是添加到已有的答案中。 Linux 确实没有更好的选择。我一直在寻找更好的东西,我发现这个项目试图以编程方式提供更有用的东西:

https://criu.org/Task-diag

然而,这些都不是上游的,可能是因为目前似乎很少有人真正关心这个问题。它主要关注高性能 OS 级跟踪应用程序和实时,它们在 Linux.

中还处于起步阶段

一个有趣的事实,其他类似的 OSes 没有这个问题(OpenBSD,QNX,...)