Добре..
$ ulimit -s
8192
$ sudo ulimit -s 16384
$ ulimit -s
8192
Чому ulimit
зневажливо ставиться до мене таким варварським способом?
Добре..
$ ulimit -s
8192
$ sudo ulimit -s 16384
$ ulimit -s
8192
Чому ulimit
зневажливо ставиться до мене таким варварським способом?
Відповіді:
ulimit
специфічна оболонка / процес Пропустити sudo
.
$ ulimit -s
8192
$ ulimit -s 16384
$ ulimit -s
16384
sudo
що не помилився, коли пройшов ulimit
; зазвичай він потребує зовнішньої бінарної, але ulimit
є вбудованою оболонкою.
which 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 -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
$
Підсумовуючи це: якщо ви встановите свій жорсткий ліміт і хочете підняти його, вам не пощастить у цій оболонці , ... якщо ви не залишаєтесь суперпопулярним або не користуєтесь якоюсь умовою, щоб згодом відмовитись від пільг.
cd
.