Answers:
ulimit
是特定于外壳程序/进程的。跳过sudo
。
$ ulimit -s
8192
$ ulimit -s 16384
$ ulimit -s
16384
sudo
,通过时没有给出错误ulimit
; 通常它需要一个外部二进制文件,但是ulimit
是内置的shell。
which ulimit
。毫不奇怪。
丹尼尔·贝克(Daniel Beck)的回答并不能说明所有真相(实际上这只是个小技巧),也无法帮助需要实际执行“ sudo ulimit”操作的人员。
问题是
丹尼尔(Daniel)的示例仅在非常特殊的情况下可行(幸运的是默认情况下)。
反例:
$ 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
;但由于丹尼尔(Daniel)所写的内容,它无法正常工作。
$ sudo ulimit -s 16384 # maybe with sudo?
$ ulimit -s
8191
$
这里发生的是sudo
启动了一个新的shell,并在其中运行ulimit
;在该shell中,设置了新的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
$
总而言之:如果您设置了硬限制并希望提高该限制,那么您在该shell中是不走运的 ...除非您继续以超级用户身份使用或之后使用一些咒语来放弃特权。
cd
。