我将应用程序从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)
小智 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)
从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万)以下的任何值。