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