Максимальный PID в Linux - PullRequest
48 голосов
/ 09 июня 2011

Я портирую приложение из Tru64 на Linux, и оно использует PID_MAX, определенный в limit.h.У Linux нет этого определения.Как найти PID_MAX в c без чтения /proc/sys/kernel/pid_max вручную?Есть ли библиотека?

Ответы [ 3 ]

79 голосов
/ 09 июня 2011

32768 по умолчанию, вы можете прочитать значение в вашей системе в /proc/sys/kernel/pid_max.

И вы можете установить более высокое значение (до 2 22 * ​​1005 * = 4 194 304 на 32-разрядных машинах) с помощью:

echo 4194303 > /proc/sys/kernel/pid_max

Подробнее здесь:

http://www.cs.wisc.edu/condor/condorg/linux_scalability.html (через archive.org)

12 голосов
/ 09 июня 2011

Максимальное значение PID в Linux настраивается. Вы можете получить к нему доступ через файл /proc/sys/kernel/pid_max. Этот файл (новый в Linux 2.5) задает значение, при котором PID оборачиваются (то есть значение в этом файле на единицу больше, чем максимальный PID). Значение по умолчанию для этого файла, 32768, приводит к тому же диапазону PID, что и в более ранних ядрах. Значение в этом файле может быть установлено на любое значение до 2 ^ 22 (PID_MAX_LIMIT, приблизительно 4 миллиона).

С точки зрения программирования, вы должны использовать тип pid_t для работы с идентификатором процесса. Вы даже можете получить доступ к минимальным / максимальным значениям, используя целочисленные черты. Вот пример того, как это делается с использованием C ++ и Boost в Linux 2.6.X на платформе x86_64:

$ 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
5 голосов
/ 09 декабря 2015

со страницы руководства proc(5):

/proc/sys/kernel/pid_max (начиная с Linux 2.5.34)

В этом файле указывается значение, при котором PID оборачиваются (то есть значение в этом файле на единицу больше максимального PID). PID, превышающие это значение, не выделяются; таким образом, значение в этом файле также действует как общесистемное ограничение на общее количество процессов и потоков. Значение по умолчанию для этого файла, 32768, приводит к тому же диапазону PID, что и в более ранних ядрах. На 32-битных платформах максимальное значение для pid_max составляет 32768. В 64-разрядных системах для pid_max может быть установлено любое значение до 2 ^ 22 (PID_MAX_LIMIT, приблизительно 4 миллиона).

...