limit.conf 值是否应用于每个进程?

limit.conf 值是否应用于每个进程?

我正在为我的 oracle 用户调整该nofile/etc/security/limits.conf,但我对其行为有疑问:是否nofile限制了用户可以打开的文件总数全部其进程或是否限制用户可以打开的文件总数每个它的流程?

具体来说,对于以下用途:

oracle                  hard    nofile                  65536

答案1

中的大多数值limits.conf都是限制,可以使用ulimitshell 命令或setrlimit系统调用。它们是过程的属性。这些限制独立适用于每个进程。特别是,每个进程最多可以nofile打开文件。用户进程累积的打开文件数量没有限制。

nproc限制是一种特殊情况,因为它确实对用户的所有进程进行求和。尽管如此,它仍然适用于每个进程:当进程调用fork创建新进程时,如果属于该进程 euid 的进程数量大于该进程的RLIMIT_NPROC值,则该调用将被拒绝。

limits.conf手册页解释限制适用于会话。这意味着会话中的所有进程都将具有这些相同的限制(除非被这些进程之一更改)。这并不意味着任何总和都是在会话中的进程上完成的(这甚至不是操作系统跟踪的东西 - 有会话的概念,但它比会话更细粒度,例如每个 X11 应用程序往往会结束在其自己的会话中)。它的工作方式是登录进程为自己设置一些限制,并且它们由所有子进程继承。

¹例外情况是maxloginsmaxsysloginschroot,它们作为登录过程的一部分应用以拒绝或影响登录。

相关内容