Linux中的最大PID

时间:2011-06-09 14:09:30

标签: c linux pid

我正在将应用程序从Tru64移植到Linux,它使用limits.h中定义的PID_MAX。 Linux没有那个定义。 如何在不强行阅读/proc/sys/kernel/pid_max的情况下在 c 中找到PID_MAX? 有图书馆吗?

4 个答案:

答案 0 :(得分:77)

32768默认情况下,您可以在/proc/sys/kernel/pid_max中读取系统上的值。

你可以设置更高的值(在32位机器上最多2 22 = 4,194,304):

echo 4194303 > /proc/sys/kernel/pid_max

在这里阅读更多内容:

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

答案 1 :(得分:12)

Linux中PID的最大值是可配置的。您可以通过/proc/sys/kernel/pid_max文件访问它。此文件(Linux 2.5中的新增内容)指定PID回绕的值(即,此文件中的值是大于最大PID的值)。此文件的默认值32768导致与早期内核相同的PID范围。此文件中的值可以设置为最大值2 ^ 22(PID_MAX_LIMIT,大约4百万)。

从编程角度来看,您必须使用pid_t类型来处理进程ID。您甚至可以使用整数特征访问它的最小/最大值。下面是在x86_64平台上运行的Linux 2.6.X上使用C ++和Boost执行此操作的示例:

$ 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

答案 2 :(得分:4)

来自proc(5)手册页:

  

/proc/sys/kernel/pid_max(自Linux 2.5.34起)

     

此文件指定PID回绕的值(即,此文件中的值是大于最大PID的值)。不分配大于此值的PID;因此,此文件中的值也可作为进程和线程总数的系统范围限制。此文件的默认值32768导致与早期内核相同的PID范围。在32位平台上,32768是pid_max的最大值。在64位系统上,pid_max可以设置为最多2 ^ 22(PID_MAX_LIMIT,大约4百万)的任何值。

答案 3 :(得分:2)

Ubuntu 20.04似乎已将限制提高到最大值(4194304):

import os
os.getcwd()