2016-12-25 72 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 
相关问题