这很奇怪。我试图通过我的ulimit
设置为:60000
startup.sh
#!/bin/bash
ulimit -n 60000
echo "Hello! File Descriptor set"
我可以使用./startup.sh
(755 文件权限) 执行此操作,并打印 echo 行,并且不显示任何错误。但是,当我执行ulimit -n
此操作时,它仍然显示1024
,发生了什么?
让我感到惊奇的是,我可以ulimit -n 60000
在终端中输入,然后执行ulimit -n
,并且它完美地工作。为什么我不能通过脚本设置文件描述符限制?
Debian 8,64 位。OpenVZ 容器
答案1
ulimits 是每个进程,不是针对每个用户,也不是针对每个系统。
该ulimit
命令内置于 shell 中,因此它仍在同一进程中;但是,调整后的限制仅影响那进程,以及从中运行的所有内容(子进程继承相同的限制)。
然而,./startup.sh
作为分离过程——因此它成功地调整它自己的限制,但这不会神奇地向上传播到其父级。
(这与使用或导出的情况相同cd
- 即使您可以在脚本中使用它们,但它们都会更改脚本自身进程的参数,而不是整个系统的参数,并且一旦脚本进程退出就会被遗忘。)
注意:是另一个命令,prlimit
它允许您调整另一个进程(由 PID 指定)的资源限制。脚本可以像这样更改其父进程的文件限制:
prlimit --pid=$PPID --nofile=4096