2016-12-25 52 views
-1

我有下面的代碼,我試圖計算所有進程。我不明白如何計算最大進程數。創建一個程序來計算系統中的最大進程數

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    int pid, pidmax = 0; 
    while(1) 
    { 
     pid = fork(); 
     pidmax = getpid(); 
     if(pid == 0){ 
      if(pidmax < getpid()) 
       pidmax = getpid(); 
      printf("pid: %d, max: %d\n", getpid(), pidmax); 
      return 0; 
     } 

     if(pid == -1) { 
     printf("Maximum process: %d\n", pidmax); 
     exit(-1); 
     } 
    } 
    return 0; 
} 
+0

你可以做到這一點通過使用一個計數器,計數器遞增,同時得到了一個叉。 –

+0

它的工作原理,但需要使用只有他們的ID比較找到最大數量。 –

回答

3

有更簡單的方法來做到這一點,而不是通過實驗。

大多數Unix系統提供ulimit來顯示您帳戶中的各種軟(即用戶定義的)和硬(即管理員定義的)限制。例如,這裏是在OS X上

$ ulimit -a -S 
core file size   (blocks, -c) 0 
data seg size   (kbytes, -d) unlimited 
file size    (blocks, -f) unlimited 
max locked memory  (kbytes, -l) unlimited 
max memory size   (kbytes, -m) unlimited 
open files      (-n) 256 
pipe size   (512 bytes, -p) 1 
stack size    (kbytes, -s) 8192 
cpu time    (seconds, -t) unlimited 
max user processes    (-u) 709 
virtual memory   (kbytes, -v) unlimited 

$ ulimit -a -H 
core file size   (blocks, -c) unlimited 
data seg size   (kbytes, -d) unlimited 
file size    (blocks, -f) unlimited 
max locked memory  (kbytes, -l) unlimited 
max memory size   (kbytes, -m) unlimited 
open files      (-n) unlimited 
pipe size   (512 bytes, -p) 1 
stack size    (kbytes, -s) 65532 
cpu time    (seconds, -t) unlimited 
max user processes    (-u) 1064 
virtual memory   (kbytes, -v) unlimited 

我的軟,硬限制雖然系統可以支持更多的進程,你的程序將通過這些限制的限制。我限制在709(什麼奇數)的進程而它在單一時間提高到1064

的最大進程數是由pid_t的大小,往往在內核中定義的限制的限制。有關更多詳細信息,請參閱this answer以及this answer

-1

這可以通過計算/proc目錄中存在的編號目錄的數量來實現。這些編號的目錄是當前正在運行的進程的PID。

/proc稱爲進程信息僞文件系統。 欲瞭解更多信息,您可以訪問, http://tldp.org/LDP/Linux-Filesystem-Hierarchy/html/proc.html

我已經寫了小代碼,其中運行的進程數。

#include <stdio.h> 
#include <dirent.h> 

int main() 
{ 
     DIR* proc = opendir("/proc"); 
     struct dirent* ent; 
     int count = 0; 

     if(proc == NULL) { 
       perror("opendir(/proc)"); 
       return 1; 
     }  

     while(ent = readdir(proc)) { 
      if(!isdigit(*ent->d_name)) 
       continue; 
      count++; //if directory name is number then increment the count. 
     } 

     closedir(proc); 

     printf("Number of Processes=%d\n",count); 
     return 0; 
} 
+0

至少爲評論投票。不要只是投票... –

+0

@A。 Norvag ...你可以試試我的解決方案。它會爲你工作。在任何查詢的情況下還原... –

+0

我試過你的解決方案。但它不給我想要的結果。有了這個代碼只翻3的過程中,即使系統中的最大進程數:32765 –

0

看看在PROC文檔(5),你會看到這樣的處理現場:

Number of forks since boot. 

所以,這根本就不是你要找的數量。 ps會給你,因爲你已經知道,計數在/ proc下的名稱中只有數字的目錄是另一種方法。

ulimit可能會將每個用戶的最大進程限制爲小於最大pid。

ulimit-u說明用戶在特定時間可以擁有的總進程。上述命令將輸出返回爲63203.這意味着對於用戶在某個時間點創建的所有進程,用戶可以運行63203個進程。

您將獲得運行進程的總數定的機器

ps -e | wc -l 
相關問題