【问题标题】:Is there a lightweight way to obtain the current number of Processes in Linux?有没有一种轻量级的方法来获取 Linux 中的当前进程数?
【发布时间】:2011-12-29 19:49:24
【问题描述】:

我希望我的(基于 C/C++ 的)程序显示本地系统上当前存在多少进程的数字指示器。 number-of-running-processes 值会被经常查询(例如每秒一次)以更新我的显示。

有没有一种轻量级的方法来获得这个数字?显然我可以调用“ps ax | wc -l”,但我不希望强制计算机生成一个进程并解析数百行文本以得出一个整数。

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

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

【问题讨论】:

标签: c linux process


【解决方案1】:

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

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


更新:这是我最终得到的函数。

#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
}

【讨论】:

    【解决方案2】:

    opendir("/proc") 并计算目录条目的数量且名称仅为数字。

    【讨论】:

      猜你喜欢
      • 2011-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-18
      • 2010-10-10
      • 1970-01-01
      • 2011-02-19
      相关资源
      最近更新 更多