4

/etc/security/limits.conf で、制限はユーザー単位 (またはグループ単位) で構成されていることに注意しました。たとえば、次のようになります。 @faculty hard nproc 50

制限を設定する作業を行うのは setrlimit だと思いますが、 setrlimit はプロセス単位で機能します。つまり、呼び出しプロセスにリソース制限を設定するだけなので、ユーザーに制限を設定できないため、OS はどのように尊重できますかlimits.conf で設定されたリソース制限?

もう 1 つの質問ですが、特定のプロセスがリソース クォータを超えた場合、そのプロセスは強制終了されますか? もしそうなら、どの信号によって?ありがとうございました。

4

3 に答える 3

4

すでに回答されているように、OS はユーザーごとではなく、プロセスごとのユーザー制限を尊重します。

ユーザーに属するすべてのプロセスに制限を適用する必要がある場合は、制御 cgroup を使用できます。

http://en.wikipedia.org/wiki/Cgroups

于 2012-03-19T13:33:13.230 に答える
3

ユーザー/グループごとにハード制限とソフト制限を設定できます。プロセス自体のハードリミットを変更できるようにするには、プロセスに特権 (root) が必要です。プロセスがソフト リミットを超えようとしたときに何が起こるかは、リソースによって異なります。

  1. データ制限 -mallocそしてnew失敗する
  2. ファイルを開く - ファイル記述子の作成が失敗する (open、creat、socket、accept など)
  3. core - コア ファイルは切り捨てられます
  4. ファイル サイズ - SIGXFSZ が問題のあるスレッドに配信されます。
  5. stack - 問題のあるスレッドに配信された SIGSEGV

詳細については、setrlimit マンページを参照してください。

limits.confで、指定したユーザー/グループのプロセスごとに制限を割り当てます。したがって、ユーザー X に 10MiB のスタック制限を設定すると、ユーザー X の資格情報で実行されるすべてのプロセスに 10MB のスタック制限が設定されることになります。ユーザー X が所有するすべてのプロセスの「リソースの合計」を表す制限ではありません

于 2012-03-19T06:35:35.783 に答える
0

からman setrlimit

RLIMIT_NPROC 呼び出しプロセスの実ユーザー ID に対して作成できるプロセス (より正確には、Linux ではスレッド) の最大数。この制限に達すると、fork(2) はエラー EAGAIN で失敗します。

ご覧のとおりsetrlimit、呼び出しプロセスのユーザーに制限を設定できます。そのため、そのユーザーの呼び出しプロセスを通じてユーザーに制限を設定できます。

2 番目の質問に対して、いくつかの例では、カーネルはそもそもプロセスがその制限を超えることを許可しません。上記の例では、fork()より多くのリソースを割り当てた後に呼び出しプロセスを強制終了するのではなく、それ自体が失敗します。場合によっては、CPU 使用率などで、プロセスが を超えるとSOFT_LIMIT、aSIGXCPUが送信されます。そして、それを超えるとHARD_LIMITSIGKILL送信されます

于 2012-03-19T06:28:22.813 に答える