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