7

我在用最近的 glibc 询问 linux。

有没有办法检测该进程由 1 个线程或多个线程组成?

线程可以由 pthread 或裸 clone() 创建,所以我需要一些相当通用的东西。

UPD:我想从它本身检测当前进程的线程。

4

4 回答 4

12

检查目录 /proc/YOUR_PID/task/ 是否仅包含一个子目录。如果您有多个线程在处理中,则会有多个子目录。

硬链接计数可用于计算子目录。此函数返回当前线程数:

#include <sys/stat.h>

int n_threads(void)
{
    struct stat task_stat;

    if (stat("/proc/self/task", &task_stat))
        return -1;

    return task_stat.st_nlink - 2;
}
于 2010-11-08T17:09:55.223 回答
0

/proc 是在 Linux 中执行此操作的标准方法。'ps' 之类的工具通过 /proc 工作。在 Linux 2.6 中,您可以在 /proc/self/stat 中找到线程数,但这不是向后兼容的。

于 2010-11-08T17:30:53.763 回答
0

我想您可以运行“ps”(通过 popen() 或类似方法)并解析其输出,然后查看您的进程 ID(由 getpid() 返回)出现在输出中的次数。可能有更好的方法,但这是首先想到的。

于 2010-11-08T17:15:14.147 回答
0

Victor 的答案肯定是最快的,尽管您可能想考虑使用 ps 库。

Ubuntu下的名称是libprocps3-dev这样你使用安装它使用:

sudo apt-get install libprocps3-dev

标题位于/usr/include/proc.

请注意,该库通过读取 /proc 来工作。因此,它与直接读取感兴趣的文件相同,只是它会知道各个版本之间的差异并为您处理这些问题。

有关详细信息,请参阅http://procps.sourceforge.net/index.html

于 2015-06-01T07:09:55.573 回答