3.6. コントロールグループへのプロセス移動

cgclassify コマンドを実行して、プロセスを cgroup に移動します。
cgclassify -g controllers:path_to_cgroup pidlist
ここで、
  • controllers は、コンマ区切りのリソースコントローラーの一覧、または利用可能なすべてのサブシステムに関連付けられた階層内のプロセスを起動するために * に置き換えます。同じ名前の cgroup が複数存在する場合には、-g オプションを指定すると、プロセスがそれらのグループのそれぞれに移動することに注意してください。
  • path_to_cgroup は、その階層内の cgroup へのパスです
  • pidlist は、プロセス識別子 (PID) のスペースで区切られた一覧です。
-g オプションが指定されていない場合、cgclassify/etc/cgrules.conf を自動的に検索し、最初に適用できる設定ラインを使用します。このラインに基づいて、cgclassify はプロセスの移動先となる階層と cgroup を判別します。正常に移動するには、移動先の階層が存在していなければなりません。/etc/cgrules.conf に指定されるサブシステムは、/etc/cgconfig.conf の対応する階層に適切に設定されている必要があります。
pid の前に --sticky オプションを追加すると、同じ cgroup 内に任意の子プロセスを維持することもできます。このオプションを設定せず、かつ cgred サービスが稼働中の場合、子プロセスは /etc/cgrules.conf の設定に基づいて cgroup に割り当てられます。そのプロセス自体は、それを起動した cgroup に残ります。
/etc/cgrules.conf ファイルに設定されているパラメーターセットに従ってタスクを cgroup に移動するcgred サービス (cgrulesengd サービスを起動する) を使用することもできます。手動で接続されたコントローラーを管理するには cgred のみを使用します。/etc/cgrules.conf ファイル内のエントリーは、次の 2 つの形式のいずれかを取ります。
  • user subsystems control_group;
  • user:command subsystems control_group.
例:
maria			net_prio		/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 にプレフィックスを付けた場合には、個別のユーザーではなくグループを示します。 たとえば、@adminsadmins グループ内のすべてのユーザーです。
  • * : 「すべて」を示します。たとえば、subsystem フィールド内の * はすべてのサブシステムを示します。
  • % : 上の行の項目と同じ項目であることを示します。以下はその例です。
    @adminstaff	net_prio   /admingroup
    @labstaff	%	  %