Dobrze..
$ ulimit -s
8192
$ sudo ulimit -s 16384
$ ulimit -s
8192
Dlaczego nie ulimit
szanuje mnie w tak barbarzyński sposób?
Dobrze..
$ ulimit -s
8192
$ sudo ulimit -s 16384
$ ulimit -s
8192
Dlaczego nie ulimit
szanuje mnie w tak barbarzyński sposób?
Odpowiedzi:
ulimit
jest specyficzny dla powłoki / procesu. Pomiń sudo
.
$ ulimit -s
8192
$ ulimit -s 16384
$ ulimit -s
16384
sudo
że nie dał błędu, gdy został zaliczony ulimit
; zwykle potrzebuje zewnętrznego pliku binarnego, ale ulimit
jest wbudowaną powłoką.
which ulimit
. Nic w tym dziwnego.
Odpowiedź Daniela Becka nie mówi całej prawdy (w rzeczywistości jest to sztuczka zręczna) i nie pomaga ludziom, którzy muszą robić „sudo ulimit”.
Problemem jest
Przykład Daniela działa tylko w bardzo specyficznej sytuacji (która na szczęście jest domyślna).
Przeciwprzykład:
$ 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
Więc ustawiasz limit za pomocą ulimit -s
, i to poszło i ustawiasz zarówno miękkie, jak i twarde ograniczenia. Teraz nie możesz ustawić go wyżej.
W tym momencie możesz spróbować sudo
; ale to nie zadziała z powodu tego, co napisał Daniel.
$ sudo ulimit -s 16384 # maybe with sudo?
$ ulimit -s
8191
$
Stało się tutaj to, że sudo
uruchomiono nową powłokę, w której działała ulimit
; i w tej powłoce ustawiono nowy ulimit. Ale potem ta skorupa zakończyła pracę, została zburzona, a teraz wróciłeś do poprzedniej powłoki z poprzednią ulimit.
Dowód:
$ 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
$
Dlaczego więc dokładnie działał przykład Daniela? Z powodu domyślnych twardych i miękkich limitów ulimita mógł przesunąć miękki limit na twardy. Możemy to zrobić w zwolnionym tempie, aby pokazać sztuczkę:
$ 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
$
Podsumowując: jeśli ustawisz swój twardy limit i chcesz go podnieść, nie masz szczęścia w tej powłoce , ... chyba że pozostaniesz superużytkownikiem lub użyjesz zaklęcia, aby później upuścić uprawnienia.
cd
.