如何确定最大用户进程值?

sch*_*acs 5 linux limit proc

哪个值是正确的?(或者都正确,但哪个会生效?)

$ 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
Run Code Online (Sandbox Code Playgroud)

cuo*_*glm 8

所有值都是正确的,并且具有不同的含义。/proc/sys/kernel/pid_max是 的最大值PIDulimit -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).
Run Code Online (Sandbox Code Playgroud)

来自man bash

ulimit [-HSTabcdefilmnpqrstuvx [limit]]
              .....
              -u     The maximum number of processes available to a single user
              .....
Run Code Online (Sandbox Code Playgroud)

笔记

当一个新进程被创建时,它被分配到内核进程计数器的下一个可用数量。当它达到时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;
Run Code Online (Sandbox Code Playgroud)