为什么在脚本中调用时 ulimit -n 不起作用?

Joh*_*ler 5 linux shell-script ulimit

这很奇怪。我试图设置ulimit60000通过我的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 容器

use*_*686 7

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)