launchctl 限制 maxfiles 与 sysctl kern.maxfilesperproc

launchctl 限制 maxfiles 与 sysctl kern.maxfilesperproc

我正在尝试了解 MacOS High Sierra 的行为。以下是我的计算机上的输出:

launchctl 限制最大文件数
maxfiles 256 无限制

sysctl kern.maxfiles
kern.max文件数:12228

sysctl kern.maxfilesperproc
kern.maxfilesperproc:10240

我的问题是:

  1. 最大文件数 256launchctl 限制最大文件数每个进程都有限制吗?
  2. 为什么最大文件数通过“launchctl limit maxfiles”不同于内核最大文件数每个进程的最大文件数
  3. 哪个限制(最大文件数 256或者kern.maxfilesperproc:10240) 是否适用于用户从应用程序手动启动的应用程序?

答案1

  1. maxfiles 256来自launchctl limit maxfiles每个进程的限制吗?

是的。launchctl limit maxfiles打印每个进程的软限制和硬限制,如所报告的getrlimit(2),其手册页显示:

     资源限制被指定为软限制和硬限制。当
     超过软限制时,进程可能会收到信号(例如,如果
     CPU 时间或文件大小超出),但将允许连接
     继续执行,直到达到硬限制(或修改其资源
     限制)。

getrlimit(2)显然是 shell 内置命令ulimit获取其信息的地方。

  1. 为什么launchctl limit maxfileskern.maxfiles和不同kern.maxfilesperproc

launchctl limit maxfiles报告 launchd 对进程施加的每个进程的软限制和硬限制。 launchd 显然施加了 256 的软限制和“无限制”的硬限制,这实际上意味着它仅受kern.maxfilesperproc内核的限制,而不是launchd

kern.maxfiles是整个系统上文件描述符总数的限制;所有进程打开的所有文件的总和加上内核为自己的目的而打开的所有文件的总和。

  1. 对于用户从应用程序手动启动的应用程序适用哪项限制(maxfiles 256或)?kern.maxfilesperproc: 10240

用户从 GUI 启动应用程序时手动启动的应用程序将继承 launchd 强加的 256 软限制和“无限制”硬限制,因此其硬限制实际上将为kern.maxfilesperproc,假设系统上有足够的可用文件描述符,应用程序可以在整个系统达到 之前达到其限制kern.maxfiles

进程(应用程序)在运行时也可以使用系统调用来调整其软限制。因此,256 的软限制只是启动时的默认值,您的应用程序/进程可能会立即增加其自己的软限制。

相关内容