Чому ulimit не працює при запуску з судо?


Відповіді:


10

ulimitспецифічна оболонка / процес Пропустити sudo.

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

Я здивований, sudoщо не помилився, коли пройшов ulimit; зазвичай він потребує зовнішньої бінарної, але ulimitє вбудованою оболонкою.
амфетамахін

@amphetamachine Перевірте which ulimit. Нічого дивного в цьому немає.
Даніель Бек

Ця відповідь жахливо вводить в оману і не допомагає, навіть якщо ґрунтується на зерні істини.
hmijail сумує у відставці

3

Відповідь Даніеля Бека не говорить усієї правди (адже це справді хитра рука), і не допомагає людям, які потребують насправді робити «sudo ulimit».

Проблема в тому

  • 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 -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
$

Підсумовуючи це: якщо ви встановите свій жорсткий ліміт і хочете підняти його, вам не пощастить у цій оболонці , ... якщо ви не залишаєтесь суперпопулярним або не користуєтесь якоюсь умовою, щоб згодом відмовитись від пільг.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.