6

我有一个问题在我的脑海里。我只想知道当进程使用 fork() 系统调用创建子进程时,子进程数量的最大限制是多少?我正在使用内核为 3.2.0-45-generic 的 UBUNTU OS (12.04)。

4

5 回答 5

3

以编程方式,

#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) */
};

来自男人

RLIMIT_NPROC

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

于 2013-07-23T13:24:32.740 回答
2

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

#include "stdio.h"
#include "unistd.h"
void main()
{
        printf("MAX CHILD ID IS :%ld\n",sysconf(_SC_CHILD_MAX));
}
于 2013-07-23T13:50:13.347 回答
0

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

于 2013-07-23T13:22:11.090 回答
0

答案已经存在以获得当前最大值。我想补充一点,您可以通过更改来设置此限制/etc/security/limits.conf

sudo vi /etc/security/limits.conf

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

hard nproc 1000

您可以将其提高到您想要的任何数字 -

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

于 2013-07-23T13:24:32.880 回答
0

在 Linux 上,您可以使用:

ulimit -u

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

于 2013-07-23T13:22:48.167 回答