Я переношу приложение из Tru64 в Linux и использует PID_MAX, определенный в limits.h.
Linux не имеет этого определения.
Как найти PID_MAX в c без чтения /proc/sys/kernel/pid_max
вручную?
Есть ли библиотека?
Максимальный PID в Linux
Ответ 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 миллионов).