2.8. Déplacer un processus sur un groupe de contrôle
Vous pouvez aussi déplacer un processus en exécutant la commande
cgclassify
:
~]# cgclassify -g cpu,memory:group1 1701
La syntaxe pour
cgclassify
est : cgclassify -g
subsystems:path_to_cgroup pidlist
, où :
- subsystems est une liste des sous-systèmes séparée par des virgules, ou
*
pour lancer le processus dans les hiérarchies associées à tous les sous-systèmes disponibles. Remarquez que si des groupes de contrôle du même nom existent dans de multiples hiérarchies, l'option-g
déplace les processus dans chacun de ces groupes. Assurez-vous que le groupe de contrôle existe dans chacune des hiérarchies dont vous spécifiez les sous-systèmes ici. - path_to_cgroup est le chemin vers le groupe de contrôle dans ses hiérarchies
- pidlist est une liste d'identifiants de processus (ou PID) séparée par des espace
Vous pouvez aussi ajouter l'option
-- sticky
avant le pid afin de conserver tout processus enfant dans le même groupe de contrôle. Si vous ne spécifiez pas cette option et que le démon cgred est en cours d'exécution, les processus enfants seront alloués aux groupes de contrôle selon les paramètres se trouvant dans /etc/cgrules.conf
. Le processus, quant à lui, restera dans le groupe de contrôle à partir duquel vous l'avez démarré.
À l'aide de
cgclassify
, vous pouvez déplacer plusieurs processus simultanément. Par exemple, cette commande déplace les processus avec les PIDs 1701
et 1138
dans le groupe de contrôle group1/
:
~]# cgclassify -g cpu,memory:group1 1701 1138
Remarquez que les PIDs à déplacer sont séparés par des espaces et que les groupes spécifiés doivent être dans différentes hiérarchies.
Méthode alternative
Pour déplacer un processus vers un groupe de contrôle, écrivez son PID sur le fichier des
tâches
(tasks
) du groupe de contrôle. Par exemple, pour déplacer un processus avec le PID 1701
dans un groupe de contrôle sur /cgroup/lab1/group1/
:
~]# echo 1701 > /cgroup/lab1/group1/tasks
2.8.1. Le démon cgred
Cgred est un démon qui déplace les tâches dans des groupes de contrôle en fonction des paramètres définis dans le fichier
/etc/cgrules.conf
. Les entrées du fichier /etc/cgrules.conf
peuvent prendre l'une des formes suivantes :
- user hierarchies control_group
- user:command hierarchies control_group
Par exemple :
maria devices /usergroup/staff
Cette entrée spécifie que tout processus appartenant à l'utilisateur nommé
maria
peuvent accéder au sous-système des périphériques selon les paramètres spécifiés dans le groupe de contrôle /usergroup/staff
. Pour associer des commandes particulières à des groupes de contrôle particuliers, ajoutez le paramètre command comme suit :
maria:ftp devices /usergroup/staff/ftp
L'entrée spécifie maintenant que lorsque l'utilisateur nommé
maria
utilise la commande ftp
, le processus est automatiquement déplacé sur le groupe de contrôle /usergroup/staff/ftp
dans la hiérarchie qui contient le sous-système devices
. Remarquez cependant que le démon déplace le processus sur le groupe de contrôle uniquement après que la condition appropriée aura été remplie. Ainsi, le processus ftp
peut être exécuté pendant un court moment dans le mauvais groupe. En outre, si le processus génère des enfants alors qu'il se trouve dans le mauvais groupe, ces enfants pourraient ne pas être déplacés.
Les entrées dans le fichier
/etc/cgrules.conf
peuvent inclure les notations supplémentaire suivantes :
@
— lorsque préfixé à user, ceci indique un groupe au lieu d'un utilisateur unique. Par exemple,@admins
signale tous les utilisateurs faisant partie du groupeadmins
.*
— représente "tout". Par exemple,*
dans le champsous-système
représente tous les sous-systèmes.%
— représente un élément qui est le même que l'élément présent dans la ligne du dessus. Par exemple :@adminstaff devices /admingroup @labstaff % %