Baik..
$ ulimit -s
8192
$ sudo ulimit -s 16384
$ ulimit -s
8192
Mengapa ulimit
saya tidak menghargai saya dengan cara yang begitu biadab?
Baik..
$ ulimit -s
8192
$ sudo ulimit -s 16384
$ ulimit -s
8192
Mengapa ulimit
saya tidak menghargai saya dengan cara yang begitu biadab?
Jawaban:
ulimit
adalah shell / proses khusus. Lewati sudo
.
$ ulimit -s
8192
$ ulimit -s 16384
$ ulimit -s
16384
sudo
tidak memberikan kesalahan ketika melewati ulimit
; biasanya membutuhkan biner eksternal, tetapi ulimit
shell builtin.
which ulimit
. Tidak ada yang mengejutkan tentang itu.
Jawaban Daniel Beck tidak mengatakan yang sebenarnya (sebenarnya itu sulap), dan tidak membantu orang yang perlu melakukan "sudo ulimit".
Masalahnya adalah
Contoh Daniel hanya berhasil dalam situasi yang sangat spesifik (yang untungnya adalah default).
Contoh tandingan:
$ 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
Jadi, Anda mengatur batas dengan ulimit -s
, dan itu pergi dan menetapkan batas lunak dan keras. Sekarang Anda diblokir dari pengaturan yang lebih tinggi.
Pada titik ini Anda mungkin berpikir untuk mencoba sudo
; tetapi itu tidak akan berhasil, karena apa yang ditulis Daniel.
$ sudo ulimit -s 16384 # maybe with sudo?
$ ulimit -s
8191
$
Apa yang terjadi di sini adalah sudo
memulai shell baru, tempat shell itu berlari ulimit
; dan di shell ITU, ulimit baru ditetapkan. Tetapi kemudian shell itu menyelesaikan pekerjaannya, dihancurkan, dan sekarang Anda kembali ke shell sebelumnya dengan ulimit sebelumnya.
Bukti:
$ 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
$
Jadi, mengapa teladan Daniel bekerja? Karena batas keras dan lunak standar ulimit, ia dapat mendorong batas lunak ke batas keras. Kita bisa melakukannya dengan gerakan lambat untuk menunjukkan triknya:
$ 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
$
Singkatnya: jika Anda menetapkan batas keras dan ingin mendorongnya, Anda kurang beruntung dalam shell itu , ... kecuali Anda tetap sebagai pengguna super atau menggunakan mantra untuk menjatuhkan hak istimewa setelahnya.
cd
.