5

Which value is correct?(or they are all correct, but which one will take effect?)

$ 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
schemacs
  • 267

1 Answers1

11

All values is correct and have different meanings./proc/sys/kernel/pid_max is maximum value for PID, ulimit -u is maximum value for number of processes.

From 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).

From man bash:

ulimit [-HSTabcdefilmnpqrstuvx [limit]]
              .....
              -u     The maximum number of processes available to a single user
              .....

Note

When a new process is created, it is assigned next number available of kernel processes counter. When it reached pid_max, the kernel restart the processes counter to 300. From linux source code, pid.c file:

....
#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;
cuonglm
  • 153,898
  • 1
    But why my max user processes(77301) is greater than pid_max(32768)? – schemacs Apr 10 '14 at 06:45
  • Because the PID will be reset when it reached pid_max, updated my answer for more details. – cuonglm Apr 10 '14 at 07:09
  • So How can I run 77301 process while pid has only 32768 position? – schemacs Apr 10 '14 at 07:22
  • 1
    No, you can not run 77301 processes simulately. If you have processes > pid_max, you get error message like "No more processes...". If you have processes < pid_max, you will get "Resource temporarily unavailable". – cuonglm Apr 10 '14 at 07:42
  • @schemacs Because you could increase kernel.pid_max if you wanted (assuming your architecture supports it). – Gilles 'SO- stop being evil' Apr 10 '14 at 21:33
  • @Gilles I think you are right. But if I don't increase the pid_max, So this will be the up limit(even ulimit allow more process)? – schemacs Apr 11 '14 at 03:36
  • @schemacs: maybe yes. But I mean you will get two different error messages in two situations. – cuonglm Apr 11 '14 at 03:40
  • So if pid_max is 32768 then a "Max processes" value of 77301 is meaningless, but it can become meaningful if you increase pid_max (which is possible). – Keith Thompson Aug 19 '16 at 00:12