Red Hat Training
A Red Hat training course is available for Red Hat Enterprise Linux
2.8. コントロールグループへのプロセス移動
cgclassify
コマンドを実行して、プロセスを cgroup に移動します。
~]# cgclassify -g cpu,memory:group1 1701
cgclassify
の構文は以下のとおりです。
cgclassify -g
subsystems:path_to_cgroup pidlist
ここで、
- subsystems は、コンマ区切りのサブシステム一覧、または、利用可能なすべてのサブシステムに関連付けられた階層内のプロセスを起動するための
*
とします。同じ名前の cgroup が複数の階層に存在する場合には、-g
オプションを指定すると、それらの各グループ内にプロセスが移動される点に注意してください。ここで指定するサブシステムの各階層内に cgroup が存在していることを確認してください。 - path_to_cgroup は、その階層内の cgroup へのパスです
- pidlist は、プロセス識別子 (PID) のスペースで区切られた一覧です。
pid の前に
--sticky
オプションを追加すると、同じ cgroup 内の任意の子プロセスを維持することもできます。このオプションを設定せず、かつ cgred サービスが稼働中の場合、子プロセスは /etc/cgrules.conf
の設定に基づいて cgroup に割り当てられます。そのプロセス自体は、それを起動した cgroup に残ります。
cgclassify
を使用すると、いくつかのプロセスを同時に移動することができます。たとえば、以下のコマンドは 1701
と 1138
の PID を持つプロセスを cgroup group1/
に移動します:
~]# cgclassify -g cpu,memory:group1 1701 1138
移動する PID は、スペースで区切り、また指定したグループは異なる階層内にある必要がある点に注意してください。
その他の方法
プロセスを cgroup のディレクトリに移動するには、その PID を cgroup の
tasks
ファイルに 書き込みます。たとえば、PID 1701
の付いたプロセスを /cgroup/lab1/group1/
にある cgroup に 移動する場合は、以下のコマンドを実行します。
~]# echo 1701 > /cgroup/lab1/group1/tasks
2.8.1. cgred サービス
cgred は、
/etc/cgrules.conf
ファイルに設定されているパラメータセットにしたがってタスクを cgroup に移動するサービスです (このサービスが cgrulesengd
デーモンを起動します)。/etc/cgrules.conf
ファイル内のエントリは、次の 2 つの形式のいずれかとなります。
- user subsystems control_group
- user:command subsystems control_group
例:
maria devices /usergroup/staff
このエントリは、
maria
というユーザーに属するプロセスはいずれも /usergroup/staff
cgroup 内に指定されたパラメーターにしたがって devices
サブシステムにアクセスすることを指定します。特定のコマンドを特定の cgroup に関連付けるには、以下のようにして command パラメーターを追加します。
maria:ftp devices /usergroup/staff/ftp
このエントリにより、
maria
という名前のユーザーが ftp
コマンドを使用する時には、devices
サブシステムが入っている階層の /usergroup/staff/ftp
cgroup へプロセスが自動的に移動するように指定されるようになります。 ただし、このデーモンは、該当する条件が満たされている場合にのみ、プロセスを cgroup に移動する点に注意してください。このため、ftp
プロセスが、誤ったグループで短時間実行される可能性があります。また、そのプロセスが誤ったグループ内にある間に子プロセスが急速に発生した場合には、それらは移動されない可能性があります。
/etc/cgrules.conf
ファイル内のエントリには、以下のような注記を追加することが可能です。
@
— user にプレフィックスを付けた場合には、個別のユーザーではなくグループを示します。 たとえば、@admins
はadmins
グループ内のすべてのユーザーです。*
— 「すべて」を示します。たとえば、subsystem
フィールド内の*
は全サブシステムを示します。%
— その上の行の項目と同じ項目を示します。以下はその例です。@adminstaff devices /admingroup @labstaff % %