Подтвердить что ты не робот

Максимальный PID в Linux

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

4b9b3361

Ответ 1

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

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

echo 4194303 > /proc/sys/kernel/pid_max

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

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

Ответ 2

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

С точки зрения программирования вы должны использовать тип pid_t для работы с идентификатором процесса. Вы можете даже получить доступ к значениям min/max, используя целые черты. Вот пример этого, используя С++ и 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

Ответ 3

На странице proc(5) man:

/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 миллионов).