Unix中的最大子进程数

时间:2013-07-23 13:17:14

标签: c unix operating-system

我心中有一个问题。我只是想知道一个进程使用fork()系统调用创建子进程数的最大限制是什么? 我正在使用UBUNTU OS(12.04)和内核3.2.0-45-generic。

5 个答案:

答案 0 :(得分:2)

以编程方式,

#include <stdio.h>
#include <sys/resource.h>

int main()
{
    struct rlimit rl;
    getrlimit(RLIMIT_NPROC, &rl);
    printf("%d\n", rl.rlim_cur);
}

其中struct rlimit是:

struct rlimit {
    rlim_t rlim_cur;  /* Soft limit */
    rlim_t rlim_max;  /* Hard limit (ceiling for rlim_cur) */
};

来自man

  

<强> RLIMIT_NPROC

     

可以为调用进程的真实用户ID创建的最大进程数(或者更准确地说,在Linux上,线程)。遇到此限制时,fork(2)失败并显示错误EAGAIN。

答案 1 :(得分:2)

如果您需要最大进程数量的用户限制,此代码也可以工作:

#include "stdio.h"
#include "unistd.h"
void main()
{
        printf("MAX CHILD ID IS :%ld\n",sysconf(_SC_CHILD_MAX));
}

答案 2 :(得分:0)

进程数不是按进程限制,而是按用户限制。

答案 3 :(得分:0)

在Linux上,您可以使用:

ulimit -u

告诉您用户可以运行的最大进程,使用-a参数将告诉您所有用户限制。

答案 4 :(得分:0)

答案已经存在以获取当前最大值。我想补充一点,您可以通过在/etc/security/limits.conf

中进行更改来设置此限制

sudo vi /etc/security/limits.conf

然后将此行添加到该文件的底部

hard nproc 1000

你可以将它提升到你想要的任何数字 -

nproc是计算机上可以同时存在的最大进程数。