哪一个值是正确的?(或者都正确,但哪一个生效?)
$ 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;