2.8. Verschieben eines Prozesses in eine Kontrollgruppe

Sie können einen Prozess in eine Kontrollgruppe verschieben, indem Sie den Befehl cgclassify ausführen:
~]# cgclassify -g cpu,memory:group1 1701
Die Syntax für cgclassify lautet: cgclassify -g subsystems:path_to_cgroup pidlist, wobei gilt:
  • subsystems ist eine kommagetrennte Liste mit Subsystemen, oder *, zum Starten der Prozesse in den Hierarchien, die mit allen verfügbaren Subsystemen verknüpft sind. Falls Kontrollgruppen desselben Namens in mehreren Hierarchien existieren, beachten Sie, dass die -g Option die Prozesse in jeder dieser Gruppen verlegt. Vergewissern Sie sich, dass die Kontrollgruppe innerhalb aller Hierarchien existiert, deren Subsysteme Sie hier spezifizieren.
  • path_to_cgroup ist der Pfad zur Kontrollgruppe innerhalb ihrer Hierarchien
  • pidlist ist eine kommagetrennte Liste von Process Identifier (PIDs)
Sie können auch die Option -- sticky vor der Prozess-ID pid einfügen, um jegliche untergeordnete Prozesse in derselben Kontrollgruppe beizubehalten. Wenn Sie diese Option nicht setzen und der cgred-Daemon ausgeführt wird, werden untergeordnete Prozesse Kontrollgruppen anhand der in /etc/cgrules.conf gefundenen Einstellungen zugewiesen. Der Prozess selbst jedoch bleibt in der Kontrollgruppe, in der er gestartet wurde.
Mithilfe von cgclassify können Sie mehrere Prozesse gleichzeitig verschieben. Dieser Befehl verschiebt beispielsweise die Prozesse mit den PIDs 1701 und 1138 in die Kontrollgruppe group1/:
~]# cgclassify -g cpu,memory:group1 1701 1138
Beachten Sie, dass die PIDs, die verschoben werden sollen, durch Leerzeichen getrennt sind und dass sich die angegebenen Kontrollgruppen in verschiedenen Hierarchien befinden sollten.

Alternative Methode

Schreiben Sie den Prozess-Identifier (PID) in die tasks-Datei einer Kontrollgruppe, um einen Prozess direkt in diese Kontrollgruppe zu verschieben. Um beispielsweise einen Prozess mit der PID 1701 in eine Kontrollgruppe unter /cgroup/lab1/group1/ zu verschieben:
~]# echo 1701 > /cgroup/lab1/group1/tasks

2.8.1. Der cgred-Daemon

Cgred ist ein Daemon, der Prozesse anhand der in der Datei /etc/cgrules.conf gesetzten Parameter in Kontrollgruppen verschiebt. Einträge in der /etc/cgrules.conf-Datei können in einer der folgenden zwei Formate vorliegen:
  • user hierarchies control_group
  • user:command hierarchies control_group
Zum Beispiel:
maria			devices		/usergroup/staff
Dieser Eintrag definiert, dass alle Prozesse, die dem Benutzer namens maria gehören, auf das devices-Subsystem anhand der in der Kontrollgruppe /usergroup/staff spezifizierten Parameter zugreifen. Um bestimmte Befehle mit bestimmten Kontrollgruppen zu verknüpfen, fügen Sie den Parameter command wie folgt hinzu:
maria:ftp		devices		/usergroup/staff/ftp
Dieser Eintrag definiert nun, dass wenn der Benutzer namens maria den ftp-Befehl verwendet, der Prozess automatisch in die /usergroup/staff/ftp-Kontrollgruppe in der Hierarchie verlegt wird, die das devices-Subsystem enthält. Beachten Sie jedoch, dass der Daemon den Prozess erst in die Kontrollgruppe verlegt, nachdem die entsprechende Bedingung erfüllt wurde. Deshalb ist es möglich, dass der ftp-Prozess für kurze Zeit in der falschen Gruppe läuft. Falls der Prozess sofort Unterprozesse startet, während er sich noch in der falschen Gruppe befindet, werden diese Unterprozesse unter Umständen nicht verschoben.
Einträge in der /etc/cgrules.conf-Datei können die folgende, zusätzliche Notation enthalten:
  • @ — wird dies als Präfix für user verwendet, kennzeichnet dies eine Gruppe statt eines einzelnen Benutzers. So sind @admins beispielsweise alle Benutzer in der Gruppe admins.
  • * — steht für "alle". So steht * im Feld subsystem beispielsweise für alle Subsysteme.
  • % — steht für ein Element, das dem Element in der darüber liegenden Zeile entspricht. Zum Beispiel:
    @adminstaff		devices		/admingroup
    @labstaff		%		%