9

Что ж..

$ ulimit -s
8192
$ sudo ulimit -s 16384
$ ulimit -s
8192

Почему ulimit неуважение ко мне таким варварским способом?

2 ответа2

11

ulimit зависит от оболочки / процесса. Пропустить sudo .

$ ulimit -s
8192
$ ulimit -s 16384
$ ulimit -s
16384
3

Ответ Даниэля Бека не говорит всей правды (на самом деле это своего рода ловкость рук) и не помогает людям, нуждающимся в "sudo ulimit".

Проблема в том, что

  • Улимит имеет мягкие и жесткие ограничения
  • как только вы установите жесткий предел, вы должны быть суперпользователем, чтобы установить его выше
  • sudo запускает новую оболочку; когда вы выходите из него, вы возвращаетесь к своему старому ulimit!

Детальное объяснение

Пример Даниила работает только в очень специфической ситуации (к счастью, по умолчанию).

контрпример:

$ ulimit -s 8191              # set both hard and soft limits
$ ulimit -s                   # show current soft limit
8191
$ ulimit -s 16384             # set both hard and soft limits
-bash: ulimit: stack size: cannot modify limit: Operation not permitted

Итак, вы устанавливаете лимит с помощью ulimit -s , и на этом вы устанавливаете как мягкие, так и жесткие ограничения. Теперь вы заблокированы от установки выше.
В этот момент вы можете подумать попробовать sudo ; но это не сработает из-за того, что написал Даниил.

$ sudo ulimit -s 16384        # maybe with sudo?
$ ulimit -s
8191
$

Здесь произошло то, что sudo запустил новую оболочку, где он запускался ulimit ; и в этой оболочке был установлен новый ulimit. Но затем эта оболочка закончила свою работу, была разрушена, и теперь вы вернулись в предыдущую оболочку с ее предыдущим ulimit.

Доказательство:

$ ulimit -s 8191
$ ulimit -s
8191
$ sudo bash
# ulimit -s
8191
# ulimit -s 16384
# ulimit -s                           # It worked!
16384
# exit
exit
$ ulimit -s                           # ... but now we're back to the old ulimit.
8191
$

Так почему же именно пример Даниила сработал? Из-за установленных по умолчанию жестких и мягких ограничений ulimit он может перенести мягкий предел на жесткий. Мы можем сделать это в замедленном темпе, чтобы показать хитрость:

$ ulimit -Ss                 # show the Soft limit
8192
$ ulimit -Hs                 # show the Hard limit
65532
$ ulimit -s                  # by default, shows the Soft limit
8192
$ ulimit -s 16384            # set both the Soft and Hard limit
$ ulimit -s                  # shows the Soft limit
16384
$ ulimit -Hs                 # but, gotcha! the Hard limit has also been set
16384
$ ulimit -s 16385            # so now we can't go higher
-bash: ulimit: stack size: cannot modify limit: Operation not permitted
$

В итоге: если вы установили свой жесткий лимит и хотите его увеличить, вам не повезло в этой оболочке, ... если только вы не останетесь суперпользователем или не воспользуетесь каким-либо заклинанием, чтобы впоследствии отбросить права.

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