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

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

这很奇怪。我正在尝试通过我的ulimit设置:60000startup.sh

#!/bin/bash

ulimit -n 60000
echo "Hello! File Descriptor set"

我可以使用./startup.sh(755 文件权限)执行此操作,并打印回显行,并且不显示任何错误。但是,当我这样做时,ulimit -n它仍然显示1024,这是怎么回事?

让我感到惊奇的是,我可以ulimit -n 60000在终端中输入,然后执行ulimit -n,并且它完美地工作。为什么我不能通过脚本设置文件描述符限制?

Debian 8,64 位。 OpenVZ容器

答案1

这只是因为限制是在 shell 脚本内部设置的,即bash通过执行脚本生成的 shell(在本例中)(内核实际上将脚本作为参数传递给 shell)。

因此,一旦脚本执行完成,shell 也消失了(和限制)。然后你又回到了原来的外壳。

要进行测试,请运行ulimit -n脚本内部。

答案2

进程只能为自己和子进程设置限制;您尝试设置的ulimit -n是全局限制,而不是每个进程的限制。为了根据需要设置全局限制,您可以使用setrlimit()resource.RLIMIT_NOFILE来创建一个 Python 脚本resource模块。

相关内容