setrlimit
syscallがすでに存在するがcgroupを生成するのはなぜですかgetrlimit
?
私はこれがrlimit
単一のプロセスでのみ機能すると思いましたが、マニュアルページには次のように記載されています。
現在のプロセスとプロセスが生成する各プロセスのシステムリソース消費制限は、getrlimit()呼び出しによって取得でき、setrlimit()呼び出しによって設定できます。
プロセスグループのリソース使用量を制御するには、親プロセス(おそらくシェル)で制限を設定すると、これらの制限がすべての子プロセスに適用されるようです。
明らかに、2つのメカニズム間のいくつかの主な違いが欠けているようですが、目的の答えが見つかりません。
答え1
この特定の表現は* BSDバージョンで主に使用されているようですsetrlimit
。
その他のバージョンsetrlimit (2)
状態
ノート
fork(2)によって生成された子プロセスは、親プロセスのリソース制限を継承します。 execve(2) 全体にわたってリソース制限を予約します。
リソース制限は各プロセスの属性プロセスのすべてのスレッドで共有されます。
これは、2GiBのメインメモリ制限が単一のプロセス(およびそのスレッド)に適用されることをより明確にしていると思います。そして、このプロセスのサブプロセスも2GiBの基本メモリ制限を継承しますが、独自の用途では2GiBです。
つまり、各プロセスのメモリ制限は2GiBであり、一緒に使用すると最大4GiBの基本メモリを使用できます。
一方、マンページはcgroups - Linux制御グループ説明する
CPUタイムアウトなどのタスクを実行できるさまざまなサブシステムが実装されています。cgroupで利用可能なメモリ、cgroupが使用するCPU時間を計算し、cgroupのプロセス実行を停止して再開します。
したがって、制御グループを使用すると、プロセスグループのリソースを制限できます。
3つのプロセスグループの場合、メインメモリを2GiBに制限すると、3つのプロセスすべてが2GiB以上のメインメモリを使用できなくなります。