Mac OS X 10.6 上 ulimit 的奇怪行为

rob*_*rtj 8 mac ulimit macos

使用 ulimit 时出现一些非常奇怪的行为。我只是打开一个新的外壳

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
Run Code Online (Sandbox Code Playgroud)

好的,即使我将 /etc/launchd.conf 中的文件限制设置为无限制,这似乎也是默认设置。但这是另一天的另一个问题。

现在我将文件数增加到 1024,让我们再次查看新设置。

 Hector:~ robertj$ ulimit -n 1024
 Hector:~ robertj$ ulimit -a | grep open
 open files                      (-n) 1024
Run Code Online (Sandbox Code Playgroud)

好的,那行得通。凉爽的!现在让我们再次更改设置

Hector:~ robertj$ ulimit -n 512
Hector:~ robertj$ ulimit -a | grep open
open files                      (-n) 512
Run Code Online (Sandbox Code Playgroud)

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

Hector:~ robertj$ ulimit -n 1024
-bash: ulimit: open files: cannot modify limit: Operation not permitted
Hector:~ robertj$ 
Run Code Online (Sandbox Code Playgroud)

这他妈是什么东西?

如果我尝试 sudo 执行此操作,则不会出现错误,但值也不会更改。

Hector:~ robertj$ sudo ulimit -n 1024
Password:
Hector:~ robertj$ ulimit -a | grep open
open files                      (-n) 512
Hector:~ robertj$ 
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?

我完全被难住了!

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

罗伯杰

Gor*_*son 19

有两件事让你困惑。首先是每个资源都有硬限制和软限制。 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
Run Code Online (Sandbox Code Playgroud)

让你感到困惑的第二件事是,sudo ulimit它并没有像你认为的那样做。它产生一个(根)子过程,设置打开文件限制该子过程,然后退出子处理。限制是每个进程的设置,因此对它们进行 sudo 更改不会做任何有用的事情。