8

Я получаю очень странное поведение при работе с ulimit. Я просто открываю новую оболочку

Hector:~ robertj$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
file size               (blocks, -f) unlimited
max locked memory       (kbytes, -l) unlimited
max memory size         (kbytes, -m) unlimited 
open files                      (-n) 256 
pipe size            (512 bytes, -p) 1
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 532
virtual memory          (kbytes, -v) unlimited

Хорошо, похоже, что это по умолчанию, даже если я установил ограничение на файлы в /etc/launchd.conf, чтобы оно было неограниченным. Но это другой вопрос для другого дня.

Теперь я увеличил количество файлов до 1024 и снова посмотрю на новые настройки.

 Hector:~ robertj$ ulimit -n 1024
 Hector:~ robertj$ ulimit -a | grep open
 open files                      (-n) 1024

Хорошо, это работает. прохладно! Теперь давайте снова изменим настройки

Hector:~ robertj$ ulimit -n 512
Hector:~ robertj$ ulimit -a | grep open
open files                      (-n) 512

Опять же, это прекрасно работает. Давайте снова изменим на более высокое значение

Hector:~ robertj$ ulimit -n 1024
-bash: ulimit: open files: cannot modify limit: Operation not permitted
Hector:~ robertj$ 

Что за хрень это сейчас?

Если я пытаюсь выполнить sudo, я не получаю сообщение об ошибке, но значение также не изменяется.

Hector:~ robertj$ sudo ulimit -n 1024
Password:
Hector:~ robertj$ ulimit -a | grep open
open files                      (-n) 512
Hector:~ robertj$ 

Что здесь происходит?

Я полностью в тупике!

Любая помощь очень ценится ...

Robertj

1 ответ1

18

Есть две вещи, которые вас смущают. Во-первых, существуют жесткие и мягкие ограничения для каждого ресурса. ulimit -n 512 устанавливает их обоих , но ulimit -a показывает только мягкий предел. Как только жесткий предел установлен, его можно только уменьшить.

$ ulimit -n
256
$ ulimit -Hn  # There's no initial hard limit
unlimited
$ ulimit -n 512  # This sets both the hard and soft limits
$ ulimit -n
512
$ ulimit -Hn
512
$ ulimit -n 1024  # Once set, the hard limit cannot be increased
-bash: ulimit: open files: cannot modify limit: Operation not permitted

Второе, что вас смущает, это то, что sudo ulimit не делает то, что вы думаете. Он порождает (корневой) подпроцесс, устанавливает ограничения для открытого файла для этого подпроцесса и затем выходит из подпроцесса. Ограничения являются настройкой для каждого процесса, поэтому изменение в них ничего не даст.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .