Maximum PID in Linux

CLinuxPid

C Problem Overview


I am porting an application from Tru64 to Linux and it uses PID_MAX defined in limits.h. Linux doesn't have that define. How do I find PID_MAX in c without reading /proc/sys/kernel/pid_max by hand? Is there a library?

C Solutions


Solution 1 - C

It's 32768 by default, you can read the value on your system in /proc/sys/kernel/pid_max.

And you can set the value higher on 64-bit systems (up to 222 = 4,194,304) with:

echo 4194304 > /proc/sys/kernel/pid_max

Read more here:

http://www.cs.wisc.edu/condor/condorg/linux_scalability.html (via archive.org)

Solution 2 - C

The maximum value of the PID in Linux is configurable. You can access it trough /proc/sys/kernel/pid_max file. This file (new in Linux 2.5) 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. The value in this file can be set to any value up to 2^22 (PID_MAX_LIMIT, approximately 4 million).

From the programming perspective, you have to use pid_t type to work with process ID. You can even access its min/max values using integer traits. Here is an example of doing that using C++ and Boost on Linux 2.6.X running on x86_64 platform:

$ cat test.cpp 
#include <sys/types.h>
#include <iostream>
#include <boost/integer_traits.hpp>

using namespace std;

int main ()
{
    cout << "pid_t max = " << boost::integer_traits<pid_t>::const_max << endl;
}

$ ./test 
pid_t max = 2147483647

Solution 3 - C

From the proc(5) man page:

> /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). PIDs greater than this value are not allocated; thus, the value in this file also acts as a system-wide limit on the total number of processes and threads. 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).

Solution 4 - C

It seems that Ubuntu 20.04 has pushed the limit to the maximum (4194304):

% cat /proc/sys/kernel/pid_max
4194304

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionAlexander StolzView Question on Stackoverflow
Solution 1 - CExosView Answer on Stackoverflow
Solution 2 - Cuser405725View Answer on Stackoverflow
Solution 3 - CJonathon ReinhartView Answer on Stackoverflow
Solution 4 - CAntti Haapala -- Слава УкраїніView Answer on Stackoverflow