创建一个程序来计算系统中的最大进程数

时间:2016-12-25 05:11:02

标签: c fork child-process

我有以下代码,我试图计算所有流程。我不明白如何计算最大进程数。

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

3 个答案:

答案 0 :(得分: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 answerthis answer

答案 1 :(得分:0)

查看proc(5)的文档,您将在进程字段中看到这一点:

ulimit

所以它根本不是你要找的号码。 ps会告诉你,正如你已经知道的那样,在/ proc下用名字中的数字计算目录是另一种方法。

ps -e | wc -l 可能会将最高每用户进程限制为小于最大pid。

ulimit -u,表示用户在特定时间可以拥有的总进程数。上面的命令将输出返回为63203.这意味着对于用户在某个时间点创建的所有进程,用户可以运行63203个进程。

您将获得给定计算机上正在运行的进程总数

<style type="text/css" rel="stylesheet">

答案 2 :(得分:-1)

这可以通过计算// simplest $str = implode(',',array_map('implode',$arr)); 目录中存在的编号目录的数量来实现。这些编号的目录是当前正在运行的PID进程。

/proc称为进程信息伪文件系统。 有关更多信息,您可以访问, http://tldp.org/LDP/Linux-Filesystem-Hierarchy/html/proc.html

我编写了一些小代码,可以运行多个进程。

/proc