Linux中的最大PID

Ale*_*olz 51 c linux pid

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

Exo*_*xos 83

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

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

echo 4194303 > /proc/sys/kernel/pid_max
Run Code Online (Sandbox Code Playgroud)

在这里阅读更多:

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

  • 不幸的是,您答案中的Condor链接为404。我已通过archive.org的链接替换了它,当然,如果您知道该文档的当前版本会更好。 (2认同)
  • 很好,对于“Ubuntu 20.04”,“/proc/sys/kernel/pid_max”现在设置为“4194304”... (2认同)

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

  • 问题标记为C,而不是C++.答案的后半部分不适用于C,在C中不可能. (7认同)
  • @R:这只是一个例子,如果我知道如何在C中获得pid_t的编译时特性,我会写C.我确信有一些等价的宏. (2认同)

Jon*_*art 7

proc(5)手册页:

/proc/sys/kernel/pid_max (从Linux 2.5.34开始)

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

  • 我很高兴你包含了参考。 (2认同)