質問: launchctl limit maxfiles vs sysctl kern.maxfilesperproc macos highsierraの動作を理解しようとしています。これが私のマシンの出力です:launchctl limit maxfiles maxfiles256無制限sysctl kern.maxfiles kern.maxfiles:12228sysctl kern.maxfilesperproc kern.maxfilesperproc:10240私の質問は次のとおりです。 maxfiles 256 from launchctl limit maxfilesはプロセスごとの制限ですか? maxfiles by "launchctl limit maxfiles"がkern.maxfilesおよびkern.maxfilesperprocと異なるのはなぜですか? アプリケーションからユーザーが手動で起動するアプリケーションには、どの制限(maxfiles 256またはkern.maxfilesperproc:1024)が適用されますか?
回答: _maxfiles 256_から_launchctl limit maxfiles_はプロセスごとの制限ですか? はい。 _launchctl limit maxfiles_は、getrlimit(2)によって報告されたプロセスごとのソフト制限とハード制限を出力します。そのマニュアルページには次のように記載されています。 リソース制限は、ソフト制限とハード制限として指定されます。 ソフト制限を超えると、プロセスはシグナルを受信する場合があります(たとえば、 cpu時間またはファイルサイズを超えた場合)が、con- は許可されます。ハード制限に達するまで(またはリソース 制限を変更するまで)実行を続けます。 getrlimit(2)は、シェルの組み込みコマンドulimitが情報を取得する場所です。 _launchctl limit maxfiles_が_kern.maxfiles_および_kern.maxfilesperproc_と異なるのはなぜですか? _launchctl limit maxfiles_は、launchdがプロセスに課すプロセスごとのソフト制限とハード制限を報告します。 launchedは、256のソフト制限と「無制限」のハード制限を課しているようです。つまり、カーネルではlaunchdではなく_kern.maxfilesperproc_によってのみ制限されます。_kern.maxfiles_は、システム全体のファイル記述子の合計の制限です。すべてのプロセスで開いているすべてのファイルと、カーネルが独自の目的で開いているすべてのファイルの合計。 アプリケーションからユーザーが手動で起動するアプリケーションには、どの制限(_maxfiles 256_または_kern.maxfilesperproc: 10240_)が適用されますか? guiからアプリを起動するユーザーが手動で起動したアプリケーションは、起動時に課せられる256のソフト制限と「無制限」のハード制限を継承するため、十分な空きファイル記述子があると仮定すると、ハード制限は実質的に_kern.maxfilesperproc_になります。システム全体が_kern.maxfiles_に達する前に、アプリが制限に達する可能性があるシステム。プロセス(アプリ)は、システムコールを使用して、実行後にソフト制限を調整することもできます。したがって、256のソフト制限は起動時のデフォルトであり、アプリ/プロセスはすぐに独自のソフト制限を増やす可能性があります。