ulimit -nと/ proc / $ PID / limitsの違い


9

Linuxでは、開いているファイルに制限があります。ulimit -n開いているファイルの制限を確認するために使用できます。これはデフォルトの1024です。次に、/ proc / $ PID / limitsを調べることにより、プロセスごとのオープンファイルのソフト/ハード制限を確認することもできます。ソフト= 1024、ハード= 4096です。

これら2つの出力の違いは何ですか?

また、行うsetRlimit()getRlimit()、システム全体またはプロセスごとに適用されますか?

回答:


11

ulimit -nデフォルトでソフト制限を設定します。-Hハード制限を表示/設定するオプションを追加できます。

ほとんどの場合、ソフト制限とハード制限は次のように動作します。

  1. rootのプロセス(実際には、を使用するプロセスCAP_SYS_RESOURCE)は、プロセスの制限を増減できます。
  2. ユーザーのプロセスは、そのユーザーが所有する他のプロセスの制限を下げる可能性があります。
  3. ユーザーのプロセスは、そのユーザーが所有するプロセスのソフト制限をハード制限まで引き上げることができます。
  4. プロセスがソフト制限を超えようとすると、その試みは失敗します。

したがって、ハードリミットはソフトリミットの上限として機能します(通常は何でもできるrootを除く)。

例外があります。ソフトCPU制限がSIGXCPU信号を送信します。プロセス、それを無視するか、クリーンアップなどに時間を費やすかを選択できます。ハードCPU制限を超えると、カーネルは送信します。SIGKILLこれは、キャッチ、処理、または無視できません。したがって、この場合、ソフトリミットは「CPU時間を超えています。終了してすぐに終了するか、またはその他の警告です」という警告として機能します。ハードリミットは「その他」です。

ほとんどはプロセスごとですが、一部(などRLIMIT_NPROC)はユーザーごとです。getrlimit(2)各制限のマニュアルページの指定。


別の関連する質問、なぜ私のシェルにはulimit -n = 1024があり、このシェルから起動された別のプロセスにはソフト制限= 4096(/ proc / PID / limitsからの読み取り)があるのですか
sdeLevelNegativeTwo

@sdeLevelNegativeTwoプロセスの前または後を解雇しましたulimit -nか?すでに起動されたプロセスには影響せず、シェルと将来のプロセスにのみ影響します。それ以外の場合、プロセスはソフト制限をハード制限に引き上げている可能性があります。したがって、ulimit -H -nそれを停止するために使用できます。
derobert 2014年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.