Bem..
$ ulimit -s
8192
$ sudo ulimit -s 16384
$ ulimit -s
8192
Por que ulimit
me desrespeita de uma maneira tão bárbara?
Bem..
$ ulimit -s
8192
$ sudo ulimit -s 16384
$ ulimit -s
8192
Por que ulimit
me desrespeita de uma maneira tão bárbara?
Respostas:
ulimit
é específico do shell / processo. Pule o sudo
.
$ ulimit -s
8192
$ ulimit -s 16384
$ ulimit -s
16384
sudo
por não ter cometido um erro ao passar ulimit
; geralmente ele precisa de um binário externo, mas ulimit
é um shell embutido.
which ulimit
. Nada de surpreendente nisso.
A resposta de Daniel Beck não diz toda a verdade (na verdade, é meio que útil), e não ajuda as pessoas que realmente precisam "sudo ulimit".
O problema é que
O exemplo de Daniel só funciona em uma situação muito específica (que felizmente é a padrão).
Contraexemplo:
$ 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
Então, você define o limite com ulimit -s
, e isso foi e define os limites suave e rígido. Agora você está impedido de configurá-lo mais alto.
Nesse ponto, você pode pensar em tentar sudo
; mas não vai funcionar, por causa do que Daniel escreveu.
$ sudo ulimit -s 16384 # maybe with sudo?
$ ulimit -s
8191
$
O que aconteceu aqui é que sudo
iniciou um novo shell, onde foi executado ulimit
; e nessa concha, o novo ulimit foi definido. Mas então esse shell terminou seu trabalho, foi demolido e agora você está de volta ao seu shell anterior com seu ulimit anterior.
Prova:
$ 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
$
Então, por que exatamente o exemplo de Daniel funcionou? Por causa dos limites rígidos e flexíveis padrão do ulimit, ele poderia empurrar o limite flexível para o rígido. Podemos fazer isso em câmera lenta para mostrar o truque:
$ 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
$
Em resumo: se você definir seu limite rígido e quiser aumentar, você não terá sorte nesse shell , ... a menos que permaneça como superusuário ou use algum encantamento para eliminar privilégios posteriormente.
cd
.