ulimit:硬限制和软限制之间的差异


87

ulimit的硬限制和软限制有什么区别?

对于打开的文件数,我的软限制为1024,硬限制为10240。可以运行打开超过1024个文件的程序。软限制是什么?


4
你在说什么ulimit -n?尝试运行一个值非常低的shell(bash -c 'ulimit -n 4; exec 3>a; exec 4>b; exec 5>c')。输出是什么?
吉尔斯2012年

Answers:


77

硬限制只能由root提高(任何进程都可以降低它)。因此对于安全性很有用:非根进程不能超过硬限制。但这是不便的,因为非根进程的限制不能低于其子进程的限制。

可以通过该过程随时更改软限制。因此,只要流程能够协作就很方便,但是对安全性却没有好处。

软限制的典型用例是禁用核心转储(ulimit -Sc 0),同时保留为正在调试的特定进程启用核心转储的选项((ulimit -Sc unlimited; myprocess))。

ulimitshell命令是围绕着一个包装setrlimit系统调用,所以这是在那里你会找到最终文件。

请注意,某些系统可能未实现所有限制。具体来说,某些系统不支持文件描述符的每个进程限制(Linux则支持)。如果您不这样做,则shell命令可能是no-op。


6
+1为软限制用例。居民集大小限制(ulimit -mRLIMIT_RSS)是一个限制示例,该限制在Linux上不再有效。但是,虚拟内存限制(ulimit -vRLIMIT_AS)有效。
亚当·扎尔克曼

@Gilles,您的意思是不重新启动过程,当我们更改软限制时,它可以立即生效吗?
2013年

1
@Ryan是的,程序可以随时通过调用来更改其自身的软限制setrlimit(在硬限制允许的范围内,除非以根用户身份运行)。大多数程序没有让用户执行此命令的命令,但是您可以尝试使用调试器将其附加到程序上并发出setrlimit调用,或者在Linux下可以调用prlimit(我不知道有什么外壳程序)效用)。
吉尔斯2013年

1
现在也有一个prlimitshell实用程序。
telcoM

0

硬限制是出于安全目的。对于非root用户,他只能将硬限制从当前设置的硬限制中减少;他不能增加它。增加硬限制只能由root用户完成(或者使用sudo特权,对此不确定)。非root用户可以做的是为其过程选择一个限制(称为软限制),该限制可以在[0,硬限制]范围内。它是过程所看到和考虑的软限制。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.