Как ОС соблюдает пользовательские ограничения, настроенные в /etc/security/limits.conf, поскольку setrlimit основан на процессах? - PullRequest
4 голосов
/ 19 марта 2012

Я отметил, что в /etc/security/limits.conf ограничения настраиваются для каждого пользователя (или для группы), например: @faculty hard nproc 50

Я предполагаю, что именно setrlimit выполняет работу по установке ограничений, но setrlimit работает на основе процесса, то есть он устанавливает только ограничения ресурсов для своего вызывающего процесса, так как он не может устанавливать ограничения для пользователя, как ОС может соблюдать ограничения ресурсов, настроенные в файле limit.conf?

Еще один вопрос, Если определенный процесс превышает свою квоту ресурсов, он будет убит? Если да, то по какому сигналу? Спасибо.

Ответы [ 3 ]

4 голосов
/ 19 марта 2012

Как уже было сказано, ОС учитывает ограничения пользователей для каждого процесса, а не для пользователя.

Если вы хотите, чтобы ограничения применялись ко всем процессам, принадлежащим пользователю, вы можете использовать контрольные группы:

http://en.wikipedia.org/wiki/Cgroups

3 голосов
/ 19 марта 2012

Вы можете установить жесткие и мягкие ограничения для каждого пользователя / группы.Чтобы иметь возможность изменить собственное ограничение hard , процесс должен быть привилегированным (root).Что происходит, когда процесс пытается превысить свое мягкое ограничение, зависит от ресурса:

  1. ограничение данных - malloc и new не удастся
  2. открыть файлы - создание файловых дескрипторов завершится неудачно(открыть, создать, сокет, принять и т. д.)
  3. core - файл ядра будет усечен
  4. размер файла - SIGXFSZ доставлен в нить-нарушитель.
  5. stack - SIGSEGVдоставлено в нить-нарушитель
  6. и т. д.

Для получения дополнительной информации см. на man-странице setrlimit .

В limit.conf вы назначаете ограничения за процесс для указанного пользователя / группы.Таким образом, если вы устанавливаете ограничение стека 10 МБ для пользователя X, это означает, что для каждого процесса , выполняемого с учетными данными пользователя X, установлено ограничение стека 10 МБ.Это не является пределом, который описывает «сумму ресурсов» для всех процессов, принадлежащих пользователю X

0 голосов
/ 19 марта 2012

С man setrlimit

RLIMIT_NPROC Максимальное количество процессов (или, точнее, в Linux, потоков), которые могут быть созданы для реального идентификатора пользователя вызывающего процесса.При достижении этого ограничения fork (2) завершается с ошибкой EAGAIN.

Как видите, setrlimit может устанавливать ограничения для пользователя вызывающего процесса.Таким образом, может устанавливать ограничения для пользователя посредством процесса вызова этого пользователя.

К вашему второму вопросу, в некоторых случаях ядро ​​не позволяет процессу превышать свой предел впервое место.В приведенном выше примере fork() сам по себе завершается ошибкой, а не уничтожает вызывающий процесс после выделения большего количества ресурсов.В некоторых случаях, например при использовании процессора, когда процесс превышает SOFT_LIMIT, отправляется SIGXCPU.И когда он превышает HARD_LIMIT, SIGKILL отправляется

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...