Яка різниця між твердими і м'якими межами в ulimit?
Для кількості відкритих файлів у мене обмежена межа 1024 та жорсткий ліміт 10240. Можна запускати програми, що відкривають більше 1024 файлів. Для чого м'яка межа?
Яка різниця між твердими і м'якими межами в ulimit?
Для кількості відкритих файлів у мене обмежена межа 1024 та жорсткий ліміт 10240. Можна запускати програми, що відкривають більше 1024 файлів. Для чого м'яка межа?
Відповіді:
Важкий ліміт може бути піднятий лише коренем (будь-який процес може знизити його). Тож це корисно для безпеки: некореневий процес не може перевищити жорсткий межа. Але незручно тим, що некореневий процес не може мати нижню межу, ніж його діти.
М’яке обмеження може бути змінено процесом у будь-який час. Тож це зручно доти, доки процеси співпрацюють, але немає користі для безпеки.
Типовим випадком використання м'яких обмежень є відключення дампів ядра ( ulimit -Sc 0
), зберігаючи при цьому можливість включити їх для певного процесу, який ви налагоджуєте ( (ulimit -Sc unlimited; myprocess)
).
Команда ulimit
оболонки - це обгортка навколо setrlimit
системного виклику, тому тут ви знайдете остаточну документацію.
Зауважте, що деякі системи можуть не реалізувати всі обмеження. Зокрема, деякі системи не підтримують обмеження на дескриптори файлів на кожен процес (Linux робить); якщо вашого немає, команда оболонки може бути неоперативною.
ulimit -m
, RLIMIT_RSS
) - приклад ліміту, який більше не діє в Linux. Межа віртуальної пам'яті ( ulimit -v
, RLIMIT_AS
) працює, хоча.
setrlimit
(в межах, дозволених жорстким лімітом, якщо, звичайно, не працює як root). У більшості програм немає команди, яка дозволяє користувачеві робити це, але ви можете спробувати приєднатись до програми за допомогою налагоджувача та змусити її визволити setrlimit
або під Linux можна зателефонувати prlimit
(для якої я не знаю жодної оболонки корисність).
prlimit
утиліта оболонки.
Жорсткий межа призначений для безпеки. Для некорінного користувача він може лише знизити жорсткий ліміт із встановленого на даний момент жорсткого межі; він не може його збільшити. Підвищення жорсткого ліміту може бути здійснено тільки користувачем root (або, можливо, з привілеєм sudo, не впевнений у цьому). Що може зробити некористувач - це вибрати ліміт (званий м'який ліміт), який може бути в межах [0, жорсткий межа] для його процесів. Це м'яка межа, яку бачать і враховують процеси.
ulimit -n
? Спробуйте запустити оболонку з дуже низьким значенням (bash -c 'ulimit -n 4; exec 3>a; exec 4>b; exec 5>c'
). Який вихід?