ulimit -n和/ proc / $ PID / limits之间的区别


9

在Linux中,存在打开文件限制。我可以ulimit -n用来查看打开文件的限制,默认为1024。然后,我还可以通过查看/ proc / $ PID / limits来查看每个进程打开文件的软/硬限制。我看到软= 1024和硬= 4096。

我想知道这两个输出之间有什么区别?

此外,这样做setRlimit(),并getRlimit()适用于全系统或每个进程?

Answers:


11

ulimit -n默认设置软限制;您可以添加-H选项以查看/设置硬限制。

在大多数情况下,软限制和硬限制的行为如下:

  1. root的进程(实际上是带有的任何进程CAP_SYS_RESOURCE)可能会提高或降低任何进程的限制。
  2. 任何用户的进程都可以降低对该用户拥有的其他进程的任何限制。
  3. 任何用户的进程都可以将软限制提高到该用户拥有的进程的硬限制。
  4. 如果某个进程尝试超过其软限制,则该尝试将失败。

因此,硬限制充当软限制的上限(根用户除外,后者通常可以执行任何操作)。

有一个例外:软CPU限制发送SIGXCPU信号。进程可以选择忽略它,或者花费时间进行清理等。一旦超过了硬CPU限制,内核就会发送SIGKILL-这是不可捕获的,不可处理的或不可忽略的。因此,在这种情况下,软限制会发出警告“您的CPU时间已用完,请立即完成并退出,否则!” 硬限制是“否则”。

大多数是每个进程的,但RLIMIT_NPROC每个用户只有几个(例如)。所述getrlimit(2)手册页指定每个限制。


另一个相关的问题,为什么有时我的shell的ulimit -n = 1024,而从该shell触发的另一个进程的软限制= 4096(从/ proc / PID / limits读取)
sdeLevelNegativeTwo 2014年

@sdeLevelNegativeTwo您是否在之前或之后触发了该过程ulimit -n?它不影响已经触发的进程,仅影响外壳程序和将来的进程。除此之外,该过程可能会将其软限制提高到硬限制。这样您就可以ulimit -H -n停止它了。
derobert 2014年
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.