我正在将一个应用程序从Tru64移植到Linux,它使用了Lims.h中定义的PID_MAX。Linux没有这个定义。如何在不用手工阅读PID_MAX的情况下在c中找到/proc/sys/kernel/pid_max?有图书馆吗?
发布于 2011-06-09 14:14:19
Linux中PID的最大值是可配置的。您可以通过/proc/sys/kernel/pid_max文件访问它。这个文件(Linux2.5中的新文件)指定PID环绕的值(即该文件中的值大于最大PID值)。此文件的默认值为32768,其结果与早期内核中的PID范围相同。此文件中的值可设置为2^22 (PID_MAX_LIMIT,约400万)的任意值。
从编程的角度来看,您必须使用pid_t类型来处理进程ID,甚至可以使用整数特征访问它的min/max值。下面是一个在Linux2.6.X上运行在C++平台上的使用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发布于 2015-12-09 02:56:41
来自proc(5)手册页:
/proc/sys/kernel/pid_max(自从Linux2.5.34之后)
此文件指定PID环绕的值(即该文件中的值大于最大PID值)。没有分配大于此值的PIDs;因此,该文件中的值也是对进程和线程总数的系统范围的限制。此文件的默认值为32768,其结果与早期内核中的PID范围相同。在32位平台上,32768是pid_max的最大值.在64位系统上,pid_max可以设置为2^22 (PID_MAX_LIMIT,约400万)的任意值。
发布于 2020-07-06 06:11:15
看来,Ubuntu20.04已经将限制推到最大值(4194304):
% cat /proc/sys/kernel/pid_max
4194304https://stackoverflow.com/questions/6294133
复制相似问题