这很奇怪。我正在尝试通过我的ulimit
设置:60000
startup.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
模块。