2011-11-15 18 views
5

我希望我的(基於C/C++的)程序顯示當前系統上當前有多少進程的數字指示符。運行進程數值會經常被查詢(例如每秒一次)以更新我的顯示。有沒有一種輕量級的方式來獲取Linux中當前的進程數量?

有沒有一個輕量級的方式來獲得該號碼?顯然我可以稱之爲「ps ax | wc -l」,但我不想強制計算機產生一個進程並解析幾百行文本,只是想出一個整數。

該程序主要在Linux下運行,但也可能在MacOS/X或Windows下運行,因此與這些操作系統相關的技術也會有所幫助。

理想的情況下,我在Linux下尋找類似this,除了可用(getsysinfo()似乎更多的是Minix的東西)

感謝, 傑里米

+0

可能重複(http://stackoverflow.com/questions/939778/linux-api-to-list-running-processes) –

+0

喜歡這裏:HTTP: //stackoverflow.com/questions/939778/linux-api-to-list-running-processes]? –

+1

我不想要一個正在運行的進程列表,只是一個計數。 –

回答

12

....當然我發佈問題後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 
} 
[Linux的API來列出正在運行的進程?]的
+0

+1,這實際上比我的建議容易得多。 –

3

opendir("/proc")和計數條目的數量那是目錄並且只有數字的名字。

相關問題