Joh*_*ler 5 linux shell-script ulimit
这很奇怪。我试图设置ulimit
到60000
通过我的startup.sh
:
#!/bin/bash
ulimit -n 60000
echo "Hello! File Descriptor set"
Run Code Online (Sandbox Code Playgroud)
我可以使用./startup.sh
(755 文件权限)执行此操作并打印回显行,并且未显示任何错误。但是,当我这样做ulimit -n
时仍然显示1024
,这是怎么回事?
我还觉得很有趣的是,我可以ulimit -n 60000
在终端中输入,然后ulimit -n
就可以完美运行了。为什么我不能通过脚本设置文件描述符限制?
Debian 8,64 位。OpenVZ 容器
ulimits 是per-process,而不是 per-user 或 per-system 。
该ulimit
命令内置于 shell 中,因此它保留在同一个进程中;但是,调整后的限制仅影响该进程以及您从中运行的所有内容(子进程继承相同的限制)。
然而,./startup.sh
它作为一个单独的进程运行——因此它成功地调整了自己的限制,但这并不会神奇地向上传播到它的父进程。
(这与 withcd
或 `export 的情况相同——即使您可以在脚本中使用它们,但它们都会更改脚本自身进程的参数,而不是整个系统的参数,并且一旦脚本进程退出就会被遗忘。)
注意:有是另一个命令,prlimit
,它可以让你调整另一个进程(通过PID指定)的资源限制。脚本可以像这样更改其父进程的文件限制:
prlimit --pid=$PPID --nofile=4096
Run Code Online (Sandbox Code Playgroud)