使用 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 更改它们不会产生任何作用。