Linux:在运行时检测进程有多个线程

时间:2010-11-08 16:38:43

标签: linux multithreading pthreads glibc

我正在询问有关最近glibc的linux。

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

线程可以通过pthread或裸克隆()创建,所以我需要一些相当普遍的东西。

UPD:我想从它自己检测当前进程的线程。

4 个答案:

答案 0 :(得分:11)

检查目录/ 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;
}

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

Ubuntu下的名称是echo Mage::getSingleton('widget/template_filter')->filter($description); ,因此您可以使用以下方式安装它:

libprocps3-dev

标题位于sudo apt-get install libprocps3-dev

请注意,该库通过读取/ proc来工作。所以它与直接阅读感兴趣的文件是一样的,只有它会知道不同版本之间的差异,并为您负责。

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