我正在为我的 oracle 用户调整该nofile
值/etc/security/limits.conf
,但我对其行为有疑问:是否nofile
限制了用户可以打开的文件总数全部其进程或是否限制用户可以打开的文件总数每个它的流程?
具体来说,对于以下用途:
oracle hard nofile 65536
答案1
中的大多数值limits.conf
都是限制,可以使用ulimit
shell 命令或setrlimit
系统调用。它们是过程的属性。这些限制独立适用于每个进程。特别是,每个进程最多可以nofile
打开文件。用户进程累积的打开文件数量没有限制。
该nproc
限制是一种特殊情况,因为它确实对用户的所有进程进行求和。尽管如此,它仍然适用于每个进程:当进程调用fork
创建新进程时,如果属于该进程 euid 的进程数量大于该进程的RLIMIT_NPROC
值,则该调用将被拒绝。
这limits.conf
手册页解释限制适用于会话。这意味着会话中的所有进程都将具有这些相同的限制(除非被这些进程之一更改)。这并不意味着任何总和都是在会话中的进程上完成的(这甚至不是操作系统跟踪的东西 - 有会话的概念,但它比会话更细粒度,例如每个 X11 应用程序往往会结束在其自己的会话中)。它的工作方式是登录进程为自己设置一些限制,并且它们由所有子进程继承。
¹例外情况是maxlogins
、maxsyslogins
和chroot
,它们作为登录过程的一部分应用以拒绝或影响登录。