我正在询问有关最近glibc的linux。
有没有办法检测到该进程由1个线程或多个线程组成?
线程可以通过pthread或裸克隆()创建,所以我需要一些相当普遍的东西。
UPD:我想从它自己检测当前进程的线程。
答案 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。