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

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

评论

您在谈论ulimit -n吗?尝试运行具有非常低值的shell(bash -c'ulimit -n 4; exec 3> a; exec 4> b; exec 5> c')。输出是什么?

#1 楼

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

软限制可以随时由进程更改。因此,只要流程能够合作就很方便,但对安全性却没有好处。正在重新调试(ulimit -Sc 0)。系统可能未实现所有限制。具体来说,某些系统不支持文件描述符的每个进程限制(Linux则支持)。如果您没有,则shell命令可能是空操作。

评论


+1为软限制用例。驻留集大小限制(ulimit -m,RLIMIT_RSS)是一个限制示例,该限制在Linux上不再有效。但是,虚拟内存限制(ulimit -v,RLIMIT_AS)有效。

–亚当·扎尔克曼(Adam Zalcman)
2012年1月20日17:53

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

–瑞安
13年6月29日在2:52

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

–吉尔斯'所以-不再是邪恶的'
2013年6月29日上午8:27

现在也有一个prlimit shell实用程序。

–telcoM
19 Mar 26 '19在9:16

#2 楼

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