C 是否有一种轻量级的方法来获取Linux中当前的进程数?

C 是否有一种轻量级的方法来获取Linux中当前的进程数?,c,linux,process,C,Linux,Process,我希望我的(基于C/C++的)程序显示本地系统上当前有多少进程的数字指示器。经常查询“正在运行的进程数”值(例如每秒查询一次)以更新我的显示 有没有一个轻量级的方法来获得这个数字?显然,我可以称之为“ps ax | wc-l”,但我不希望为了得到一个整数而强迫计算机生成一个进程并解析几百行文本 该程序将主要在Linux下运行,但也可能在MacOS/X或Windows下运行,因此与这些操作系统相关的技术也会有所帮助 理想情况下,我正在寻找类似的东西,但Linux下可用的除外(getsysinfo(

我希望我的(基于C/C++的)程序显示本地系统上当前有多少进程的数字指示器。经常查询“正在运行的进程数”值(例如每秒查询一次)以更新我的显示

有没有一个轻量级的方法来获得这个数字?显然,我可以称之为“ps ax | wc-l”,但我不希望为了得到一个整数而强迫计算机生成一个进程并解析几百行文本

该程序将主要在Linux下运行,但也可能在MacOS/X或Windows下运行,因此与这些操作系统相关的技术也会有所帮助


理想情况下,我正在寻找类似的东西,但Linux下可用的除外(getsysinfo()似乎更像是Minix的东西)。

opendir(“/proc”)
并计算目录中的条目数和只有数字名称的条目数。

<。。。。当然,在我发布问题1分钟后,我找到了答案:将返回(除其他外)一个指示有多少进程的字段

也就是说,如果有人知道MacOS/X和/或相当于sysinfo()的Windows,我仍然对此感兴趣


更新:这是我最终使用的函数

#ifdef __linux__
# include <sys/sysinfo.h>
#elif defined(__APPLE__)
# include <sys/sysctl.h>
#elif defined(WIN32)
# include <Psapi.h>
#endif

int GetTotalNumProcesses()
{
#if defined(__linux__)
   struct sysinfo si;
   return (sysinfo(&si) == 0) ? (int)si.procs : (int)-1;
#elif defined(__APPLE__)
   size_t length = 0;
   static const int names[] = {CTL_KERN, KERN_PROC, KERN_PROC_ALL, 0};
   return (sysctl((int *)names, ((sizeof(names)/sizeof(names[0]))-1, NULL, &length, NULL, 0) == 0) ? (int)(length/sizeof(kinfo_proc)) : (int)-1;
#elif defined(WIN32)
   DWORD aProcesses[1024], cbNeeded;
   return EnumProcesses(aProcesses, sizeof(aProcesses), &cbNeeded) ? (cbNeeded/sizeof(DWORD)) : -1;
#else
   return -1;
#endif
}
#ifdef_uuLinux__
#包括
#已定义的elif(_苹果公司)
#包括
#已定义elif(WIN32)
#包括
#恩迪夫
int getTotalNumprocess()
{
#如果已定义(\uuuu linux\uuuuu)
结构sysinfo-si;
返回(sysinfo&si)==0)?(int)si.procs:(int)-1;
#已定义的elif(_苹果公司)
尺寸长度=0;
静态常量int name[]={CTL_KERN,KERN_PROC,KERN_PROC_ALL,0};
返回(sysctl((int*)names,((sizeof(names)/sizeof(names[0]))-1,NULL,&length,NULL,0)==0)?(int)(length/sizeof(kinfo_proc)):(int)-1;
#已定义elif(WIN32)
DWORD APROCESS[1024],需要CBS;
返回枚举进程(a进程、sizeof(a进程)和cbNeeded)(cbNeeded/sizeof(DWORD)):-1;
#否则
返回-1;
#恩迪夫
}

可能重复的如下:[我不想要运行进程的列表,只需要一个计数。