有没有一种轻量级的方法在Linux中获取当前进程数?

5
我希望我的(基于C/C++的)程序能够显示本地系统当前存在的进程数量。该“正在运行的进程数”值将经常查询(例如每秒一次)以更新我的显示。
有没有一种轻量级的方式来获取这个数字?显然,我可以调用“ps ax | wc -l”,但我不想强制计算机生成一个进程并解析几百行文本,仅仅为了得出一个整数。
这个程序主要在Linux下运行,但也可能在MacOS/X或Windows下运行,所以相关操作系统的技术也会很有帮助。
理想情况下,我正在寻找类似于这个的东西,只不过它在Linux下可用(getsysinfo()似乎更像是Minix的事情)。

可能是重复的问题:Linux API 列出正在运行的进程? - Kerrek SB
像这里一样:[https://dev59.com/gnNA5IYBdhLWcg3wfd8m]? - A.H
1
我不需要正在运行的进程列表,只需要数量。 - Jeremy Friesner
2个回答

13

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

话虽如此,如果有人知道类似于sysinfo()的MacOS/X和/或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
}

3

opendir("/proc") 打开目录并计算其中只含数字的文件夹数量。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接