ulimit 中的硬限制和软限制有什么区别?
对于打开文件的数量,我的软限制为 1024,硬限制为 10240。运行打开超过 1024 个文件的程序是可能的。软限制有什么用?
答案1
硬限制只能由 root 提高(任何进程都可以降低它)。因此它对于安全性很有用:非根进程不能超越硬限制。但这很不方便,因为非根进程的限制不能低于其子进程。
进程可以随时更改软限制。所以只要进程配合就很方便,但不利于安全。
软限制的典型用例是禁用核心转储 ( ulimit -Sc 0
),同时保留为您正在调试的特定进程启用它们的选项 ( (ulimit -Sc unlimited; myprocess)
)。
shellulimit
命令是一个包装器setrlimit
系统调用,因此您可以在其中找到最终的文档。
请注意,某些系统可能不会实现所有限制。具体来说,某些系统不支持文件描述符的每个进程限制(Linux 支持);如果你的没有,shell 命令可能是一个空操作。
答案2
硬限制是出于安全目的。对于非root用户来说,他只能在当前设置的硬限制基础上减少硬限制;他无法增加它。增加硬限制只能由 root 用户(或者可能使用 sudo 权限,不确定)来完成。非 root 用户可以做的是为其进程选择一个限制(称为软限制),该限制可以在 [0,硬限制] 范围内。它是流程看到并考虑的软限制。