为什么在使用sudo运行时ulimit不起作用?


Answers:


10

ulimit是特定于外壳程序/进程的。跳过sudo

$ ulimit -s
8192
$ ulimit -s 16384
$ ulimit -s
16384

我很惊讶sudo,通过时没有给出错误ulimit; 通常它需要一个外部二进制文件,但是ulimit是内置的shell。
amphetamachine

@amphetamachine退房which ulimit。毫不奇怪。
丹尼尔·贝克

即使基于事实真相,这个答案也极具误导性且无济于事。
hmijail哀悼辞职者,2008年

3

丹尼尔·贝克(Daniel Beck)的回答并不能说明所有真相(实际上这只是个小技巧),也无法帮助需要实际执行“ sudo ulimit”操作的人员。

问题是

  • ulimit具有软限制和硬限制
  • 设置硬限制后,您需要成为超级用户才能将其设置得更高
  • sudo启动一个新的shell;当您退出它时,您又回到了旧的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中是不走运的 ...除非您继续以超级用户身份使用或之后使用一些咒语来放弃特权。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.