Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

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 groupe admins.
  • * — représente "tout". Par exemple, * dans le champ sous-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		%		%