最近のプロセス最大数

sleep sortを「常識を覆すソートアルゴリズム!その名も”sleep sort”! – Islands in the byte stream」で知ったのが切っ掛けでふと、プロセス最大数は幾つだっけとか思ったので調べてみたメモ。
ちなみにDebian環境。


これulimitで簡単に分かります。
max user processesってのがそれで、どうもunlimitedなのでメモリが許す限り起動できそう。
ちなみに、manすると分かりますが、ulimitは実はbashの内部コマンドです。

$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 16382
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) unlimited
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited


これプログラム的にどうやっているかと言えば、getlimit(2)を使用しているはず。

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

int main(void)
{
	int ret;
	struct rlimit rlim;

	ret = getrlimit(RLIMIT_NPROC, &rlim);
	if (ret < 0) {
		return 1;
	}

	if (rlim.rlim_cur == RLIM_INFINITY) {
		printf("soft:nolimit\n");
	}
	else {
		printf("soft:%d\n", rlim.rlim_cur);
	}
	if (rlim.rlim_max == RLIM_INFINITY) {
		printf("hard:nolimit\n");
	}
	else {
		printf("hard:%d\n", rlim.rlim_max);
	}

	return 0;
}
$ ./hoge
soft:nolimit
hard:nolimit


昔は設定されてた覚えがあるんだどなぁ。
最近は設定されていない項目が多い。
そういえば、かなり昔にcoreがデフォルトで作られなくなってビックリした記憶がある。