Answers:
硬限制只能由root提高(任何进程都可以降低它)。因此对于安全性很有用:非根进程不能超过硬限制。但这是不便的,因为非根进程的限制不能低于其子进程的限制。
可以通过该过程随时更改软限制。因此,只要流程能够协作就很方便,但是对安全性却没有好处。
软限制的典型用例是禁用核心转储(ulimit -Sc 0
),同时保留为正在调试的特定进程启用核心转储的选项((ulimit -Sc unlimited; myprocess)
)。
该ulimit
shell命令是围绕着一个包装setrlimit
系统调用,所以这是在那里你会找到最终文件。
请注意,某些系统可能未实现所有限制。具体来说,某些系统不支持文件描述符的每个进程限制(Linux则支持)。如果您不这样做,则shell命令可能是no-op。
ulimit -m
,RLIMIT_RSS
)是一个限制示例,该限制在Linux上不再有效。但是,虚拟内存限制(ulimit -v
,RLIMIT_AS
)有效。
prlimit
shell实用程序。
硬限制是出于安全目的。对于非root用户,他只能将硬限制从当前设置的硬限制中减少;他不能增加它。增加硬限制只能由root用户完成(或者使用sudo特权,对此不确定)。非root用户可以做的是为其过程选择一个限制(称为软限制),该限制可以在[0,硬限制]范围内。它是过程所看到和考虑的软限制。
ulimit -n
?尝试运行一个值非常低的shell(bash -c 'ulimit -n 4; exec 3>a; exec 4>b; exec 5>c'
)。输出是什么?