ulimit: різниця між жорсткими та м'якими межами


87

Яка різниця між твердими і м'якими межами в ulimit?

Для кількості відкритих файлів у мене обмежена межа 1024 та жорсткий ліміт 10240. Можна запускати програми, що відкривають більше 1024 файлів. Для чого м'яка межа?


4
Ви про це говорите ulimit -n? Спробуйте запустити оболонку з дуже низьким значенням ( bash -c 'ulimit -n 4; exec 3>a; exec 4>b; exec 5>c'). Який вихід?
Жиль

Відповіді:


77

Важкий ліміт може бути піднятий лише коренем (будь-який процес може знизити його). Тож це корисно для безпеки: некореневий процес не може перевищити жорсткий межа. Але незручно тим, що некореневий процес не може мати нижню межу, ніж його діти.

М’яке обмеження може бути змінено процесом у будь-який час. Тож це зручно доти, доки процеси співпрацюють, але немає користі для безпеки.

Типовим випадком використання м'яких обмежень є відключення дампів ядра ( ulimit -Sc 0), зберігаючи при цьому можливість включити їх для певного процесу, який ви налагоджуєте ( (ulimit -Sc unlimited; myprocess)).

Команда ulimitоболонки - це обгортка навколо setrlimitсистемного виклику, тому тут ви знайдете остаточну документацію.

Зауважте, що деякі системи можуть не реалізувати всі обмеження. Зокрема, деякі системи не підтримують обмеження на дескриптори файлів на кожен процес (Linux робить); якщо вашого немає, команда оболонки може бути неоперативною.


6
+1 для випадку використання м'яких обмежень. Ліміт розміру встановленого резидента ( ulimit -m, RLIMIT_RSS) - приклад ліміту, який більше не діє в Linux. Межа віртуальної пам'яті ( ulimit -v, RLIMIT_AS) працює, хоча.
Адам Зальцман

@Gilles, ви маєте на увазі, не перезавантажуючи процес, коли ми змінимо м'який ліміт, це може наступити негайно?
Райан

1
@Ryan Так, програма може змінити власний м'який ліміт у будь-який час, зателефонувавши setrlimit(в межах, дозволених жорстким лімітом, якщо, звичайно, не працює як root). У більшості програм немає команди, яка дозволяє користувачеві робити це, але ви можете спробувати приєднатись до програми за допомогою налагоджувача та змусити її визволити setrlimitабо під Linux можна зателефонувати prlimit(для якої я не знаю жодної оболонки корисність).
Жиль

1
Зараз також є prlimitутиліта оболонки.
telcoM

0

Жорсткий межа призначений для безпеки. Для некорінного користувача він може лише знизити жорсткий ліміт із встановленого на даний момент жорсткого межі; він не може його збільшити. Підвищення жорсткого ліміту може бути здійснено тільки користувачем root (або, можливо, з привілеєм sudo, не впевнений у цьому). Що може зробити некористувач - це вибрати ліміт (званий м'який ліміт), який може бути в межах [0, жорсткий межа] для його процесів. Це м'яка межа, яку бачать і враховують процеси.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.