Вы можете проверить терминал следующим образом:
> echo foo | awk '{if (system("tty >/dev/null 2>&1")) print "true"; else print "false";}'
true
Из документа proc
:
On 32-bit platforms, 32768 is the maximum value for pid_max. On 64-bit systems, pid_max can be set to any value up to 2^22 (PID_MAX_LIMIT, approximately 4 million).
Вы можете увидеть с помощью cat /proc/sys/kernel/pid_max
. Вы также можете запросить это с помощью sysctl
.
sudo sysctl -a | grep kernel.pid_max
или:
sysctl -n kernel.pid_max
Измените /etc/sysctl.conf
, чтобы изменить значение навсегда, и перезагрузите с помощью sysctl -p
.
При загрузке ядро настраивает значение по умолчанию pid_max
в зависимости от количества доступных ЦП. Когда число меньше, выбирается обычное число 32768. В противном случае расчет выполняется следующим образом (, показывающим здесь, что ядро 3.10 похоже на RHEL, но помимо некоторых вариаций оно одинаково для любого последнего ядра Linux):
/* * This controls the default maximum pid allocated to a process */ #define PID_MAX_DEFAULT (CONFIG_BASE_SMALL ? 0x1000 : 0x8000)
0x8000 = 32768 — обычное значение, используемое в системах с менее чем 32 доступными потоками ЦП.
и позже:
#define PIDS_PER_CPU_DEFAULT 1024
Затем эти значения используются вkernel/pid.c
:
int pid_max = PID_MAX_DEFAULT;
и позже:
/* bump default and minimum pid_max based on number of cpus */ pid_max = min(pid_max_max, max_t(int, pid_max, PIDS_PER_CPU_DEFAULT * num_possible_cpus())); pid_max_min = max_t(int, pid_max_min, PIDS_PER_CPU_MIN * num_possible_cpus()); pr_info("pid_max: default: %u minimum: %u\n", pid_max, pid_max_min);
Таким образом, из OP это должно означать, что в общей сложности 458752/1024 = 448 одновременных доступных потоков :довольно много. Другая система, вероятно, имеет не так много ЦП/ядер/потоков и т. д., поэтому имеет более низкое значение по умолчанию pid_max
.