ulimit: разница между жестким и мягким пределами

87

В чем разница между жесткими и мягкими пределами в ulimit?

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

Даниэль Куллманн
источник
4
Ты о чем ulimit -n? Попробуйте запустить оболочку с очень низким значением ( bash -c 'ulimit -n 4; exec 3>a; exec 4>b; exec 5>c'). Какой выход?
Жиль

Ответы:

77

Жесткий лимит может быть повышен только пользователем root (любой процесс может его снизить). Так что это полезно для безопасности: процесс без полномочий root не может перешагнуть жесткий предел. Но неудобно, что процесс без полномочий root не может иметь нижний предел, чем его дочерние процессы.

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

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

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

Обратите внимание, что некоторые системы могут не реализовывать все ограничения. В частности, некоторые системы не поддерживают ограничения на процессы для файловых дескрипторов (Linux поддерживает); если у вас нет, команда shell может быть неактивной.

жилль
источник
6
+1 для варианта использования мягких ограничений. Ограничение размера резидентного набора ( ulimit -m, RLIMIT_RSS) является примером ограничения, которое больше не действует в Linux. Ограничение виртуальной памяти ( ulimit -v, RLIMIT_AS) работает, хотя.
Адам Зальцман
@ Жиль, ты имеешь в виду, не перезапуская процесс, когда мы меняем мягкий предел, он может действовать немедленно?
Райан
1
@Ryan Да, программа может изменить свое собственное мягкое ограничение в любое время, позвонив setrlimit(в пределах, разрешенных жестким ограничением, если, конечно, не выполняется от имени root). У большинства программ нет команды, которая позволяет пользователю делать это, но вы можете попробовать подключить программу с помощью отладчика и заставить ее выполнить setrlimitвызов, или в Linux вы можете вызвать prlimit(для которого я не знаю ни одной оболочки утилита).
Жиль
1
Теперь есть prlimitутилита оболочки.
TelcoM
0

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

Анкит Шубхам
источник