Есть ли легкий способ получить текущее количество процессов в Linux? - PullRequest
5 голосов
/ 15 ноября 2011

Я хочу, чтобы моя программа (на C / C ++) отображала числовой индикатор того, сколько процессов в настоящее время присутствует в локальной системе. Значение количества запущенных процессов будет часто запрашиваться (например, раз в секунду), чтобы обновить мой дисплей.

Есть ли легкий способ получить этот номер? Очевидно, я мог бы назвать «ps ax | wc -l», но я бы предпочел не заставлять компьютер запускать процесс и анализировать несколько сотен строк текста, чтобы получить одно целое число.

Эта программа будет работать в основном под Linux, но она также может работать под MacOS / X или Windows, так что методы, относящиеся к этим ОС, также будут полезны.

В идеале я ищу что-то вроде this , за исключением того, что доступно в Linux (getsysinfo () выглядит скорее как вещь Minix).

Ответы [ 2 ]

12 голосов
/ 15 ноября 2011

.... и, конечно, через 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
}
3 голосов
/ 15 ноября 2011

opendir("/proc") и подсчитать количество записей, которые являются каталогами и имеют только цифры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...