どんな値が正しいですか? (または両方が正しいですが、どちらが適用されますか?)
$ cat /proc/sys/kernel/pid_max
32768
$ ulimit -a |grep processes
max user processes (-u) 77301
$ cat /proc/1/limits |grep processes
Max processes 77301 77301 p
答え1
すべての値は正確で意味が異なります。/proc/sys/kernel/pid_max
はい最大値ですPID
。ulimit -u
はい最大値ですnumber of processes
。
からman 5 proc
:
/proc/sys/kernel/pid_max (since Linux 2.5.34)
This file specifies the value at which PIDs wrap around (i.e.,
the value in this file is one greater than the maximum PID).
The default value for this file, 32768, results in the same
range of PIDs as on earlier kernels. On 32-bit platforms, 32768
is the maximum value for pid_max. On 64-bit systems, pid_max
can be set to any value up to 2^22 (PID_MAX_LIMIT, approximately
4 million).
からman bash
:
ulimit [-HSTabcdefilmnpqrstuvx [limit]]
.....
-u The maximum number of processes available to a single user
.....
ノート
新しいプロセスが作成されると、次に使用可能なカーネルプロセスカウンタ番号が割り当てられます。到達すると、pid_max
カーネルはプロセスカウンタを300で再起動します。 Linuxソースコードのpid.c
ファイル:
....
#define RESERVED_PIDS 300
....
static int alloc_pidmap(struct pid_namespace *pid_ns)
{
int i, offset, max_scan, pid, last = pid_ns->last_pid;
struct pidmap *map;
pid = last + 1;
if (pid >= pid_max)
pid = RESERVED_PIDS;