【问题标题】:Linux c/c++ How to find PID from a ThreadIDLinux c/c++ 如何从 ThreadID 中找到 PID
【发布时间】:2014-12-17 23:01:54
【问题描述】:

我目前正在编写一个 FUSE 应用程序,它应该实现基于进程的访问权限。我现在偶然发现了这样一个事实,即 FUSE 只提供 ThreadID,而不提供 ProcessID。现在我需要找到不同进程的给定线程 ID 的 PID(或线程组 ID)。

我注意到 proc fs 提供了基于线程的信息(即使 ls /proc 没有显示任何 PID TID,它们仍然可以通过 /proc// 访问)以这种方式我可以询问 /proc//status 关于 Tgid,但由于我的 FUSE 应用每秒会处理数百个请求,我觉得这可能不是最好的方式。

有谁知道要在此处使用的 gettgid(tid) 形式的系统调用或函数?

【问题讨论】:

    标签: c++ c linux process system-calls


    【解决方案1】:

    我认为您需要使用 /proc/ 自己获取此信息。我找不到任何可以满足您需求的系统调用或 posix 函数。 /proc/ 应该很快,因为它不是磁盘上的真正 fs,我认为这是唯一的选择。

    【讨论】:

    • 确实如此。除了proc,Linux 包含很少的系统调用或 API 来访问系统信息。特别是线程 ID 位于 /proc/<parent_pid>/task/*
    • 另外,请注意,特别是在 Linux 上,线程 ID 基本上是进程 ID,我使用 getpgid 获得了一些运气(有一些示例代码);但是返回值可能并不总是相同的..
    • 感谢您的回答。经过大量进一步的研究,我决定使用 /proc//status。我的性能测试导致每秒约 45,000 个请求,并且 CPU 是可能的。
    • 我知道我可以从 /proc//task//status 获取 tgid,这样我就可以得到 pid。但是如果我不知道 ,我如何获取整个路径以读取状态?
    • /proc/self/status 会给出当前进程的状态
    猜你喜欢
    • 1970-01-01
    • 2013-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-13
    • 1970-01-01
    • 2019-07-04
    相关资源
    最近更新 更多