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

sde*_*Two 9 limit

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

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

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

der*_*ert 11

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

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

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

因此,硬限制可以作为软限制的上限(root 除外,他们通常可以做任何事情)。

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

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