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