каковы факторы, ответственные за изменение pid_max

Системный вызов ядра выполняется в контексте вызывающего процесса, только с другим уровнем привилегий и с другой инфраструктурой поддержки. Ядро Linux имеет переменную для каждого процессора, которая отслеживает текущий процесс, current_task ; он использует это всякий раз, когда ему нужно знать, что такое текущий процесс. На данном ЦП текущая задача меняется только тогда, когда решает планировщик, а переключение контекста заботится о сохранении всей необходимой информации, чтобы ядро ​​могло отслеживать, что и где происходит.

В LWN есть несколько полезных статей о системных вызовах: Анатомия системного вызова, часть 1 и , часть 2 . Они объясняют, как определяются системные вызовы и как они выполняются, хотя, возможно, недостаточно подробно, чтобы на самом деле ответить на ваш вопрос, поскольку они не охватывают подробно переход из пространства пользователя в пространство ядра; но это «просто» любая поддержка переходов на основе ловушек, доступная на ЦП.

1
20.09.2016, 14:02
2 ответа

Если я правильно помню, значение по умолчанию рассчитывается из максимального потенциального количества процессоров (rhel).

Выполните эту команду в каждой из систем.

dmesg | grep -i smp.*allow

Или возможно, что ограничение было изменено ранее администратором?

0
28.01.2020, 01:11

Может быть, вы обращаетесь к контейнеру docker или open VZ, а не к реальной машине linux? В таком случае хост может ограничить PID_MAX любым значением. Это относительно новая возможность, и она называется Cgroup pid controller. Это своего рода анти-форк бомба решение, которое предотвращает контейнер от бесконечных форков процессов, что сделает хост непригодным для использования в очень короткое время.

0
28.01.2020, 01:11

Теги

Похожие вопросы