Mac OS X 10.6 上 ulimit 的奇怪行为

Mac OS X 10.6 上 ulimit 的奇怪行为

使用 ulimit 时,我遇到了一些非常奇怪的行为。我只是打开一个新的 shell

Hector:~ robertj$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
file size               (blocks, -f) unlimited
max locked memory       (kbytes, -l) unlimited
max memory size         (kbytes, -m) unlimited 
open files                      (-n) 256 
pipe size            (512 bytes, -p) 1
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 532
virtual memory          (kbytes, -v) unlimited

好的,尽管我将 /etc/launchd.conf 中的文件限制设置为无限制,但这似乎是默认设置。但这是另一个问题,留到以后再讨论。

现在我将文件数量增加到 1024,然后再次查看新的设置。

 Hector:~ robertj$ ulimit -n 1024
 Hector:~ robertj$ ulimit -a | grep open
 open files                      (-n) 1024

好的,成功了。太棒了!现在让我们再次更改设置

Hector:~ robertj$ ulimit -n 512
Hector:~ robertj$ ulimit -a | grep open
open files                      (-n) 512

再次,效果很好。让我们再次将其更改为更高的值

Hector:~ robertj$ ulimit -n 1024
-bash: ulimit: open files: cannot modify limit: Operation not permitted
Hector:~ robertj$ 

这他妈是什么情况?

如果我尝试使用 sudo 执行此操作,我不会收到错误,但值也不会改变。

Hector:~ robertj$ sudo ulimit -n 1024
Password:
Hector:~ robertj$ ulimit -a | grep open
open files                      (-n) 512
Hector:~ robertj$ 

这里发生了什么?

我完全被难住了!

任何帮助是极大的赞赏...

罗伯特

答案1

有两件事让你感到困惑。第一,每个资源都有硬限制和软限制 ulimit -n 512两个都,但ulimit -a只显示软限制。一旦设置了硬限制,就只能降低。

$ ulimit -n
256
$ ulimit -Hn  # There's no initial hard limit
unlimited
$ ulimit -n 512  # This sets both the hard and soft limits
$ ulimit -n
512
$ ulimit -Hn
512
$ ulimit -n 1024  # Once set, the hard limit cannot be increased
-bash: ulimit: open files: cannot modify limit: Operation not permitted

让你感到困惑的第二件事是它sudo ulimit并没有像你想象的那样做。它生成一个(根)子进程,设置打开文件限制对于该子流程,然后退出子进程。限制是针对每个进程的设置,因此使用 sudo 更改它们不会产生任何作用。

相关内容