Red Hat Training

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

2.9. Lancer un processus dans un groupe de contrôle

Important

Certains sous-systèmes ont des paramètres obligatoires à définir avant de déplacer une tâche dans un groupe de contrôle qui utilise l'un de ces sous-systsèmes. Par exemple, avant de pouvoir déplacer une tâche dans un groupe de contrôle qui utilise le sous-système cpuset, les paramètres cpuset.cpus et cpuset.mems doivent être définis pour ce groupe de contrôle.
Les exemples dans cette section illustrent la syntaxe correcte pour la commande, mais ne fonctionnent que sur les systèmes sur lesquels les paramètres obligatoires ont été définis pour tout contrôleur utilisé dans les exemples. Si vous n'avez pas déjà configuré les contrôleurs appropriés, vous ne pourrez pas copier les commandes d'exemple directement depuis cette section et vous attendre à ce qu'elles fonctionnent sur votre système.
Reportez-vous à la Section 3.10, « Ressources supplémentaires » pour obtenir une description des paramètres obligatoires aux sous-systèmes donnés.
Vous pouvez aussi lancer des processus dans un groupe de contrôle en exécutant la commande cgexec. Par exemple, cette commande lance le navigateur web lynx dans le groupe de contrôle group1, sujet à toutes les limitations imposées par le sous-système cpu :
~]# cgexec -g cpu:group1 lynx http://www.redhat.com
La syntaxe pour cgexec est : cgexec -g subsystems:path_to_cgroup command arguments , où :
  • subsystems est une liste des sous-systèmes séparée par des virgules, ou * sert à lancer le processus dans les hiérarchies associées à tous les sous-systèmes disponibles. Remarquez que comme pour cgset, qui est décrit dans la Section 2.7, « Définir les paramètres », si des groupes de contrôle de même nom existent dans de multiples hiérarchies, l'option -g crée des processus dans chacun de ces groupes. Assurez-vous que le groupe de contrôle existe bien dans cahcune des hiérarchies dont vous spécifiez les sous-systèmes.
  • path_to_cgroup est le chemin d'accès vers le groupe de contrôle relatif à la hiérarchie.
  • command est la commande à exécuter
  • arguments représente tout argument de la commande
Vous pouvez aussi ajouter l'option -- sticky avant command afin de conserver tout processus enfant dans le même groupe de contrôle. Si vous ne saisissez 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 en fonction des paramètres trouvés sur /etc/cgrules.conf. Le processus, toutefois, restera dans le groupe de contrôle à partir duquel il a été démarré.

Méthode alternative

Lorsque vous lancez un nouveau processus, il hérite du groupe de son processus parent. Ainsi, déplacer votre processus shell sur un groupe de contrôle puis lancer le processus à partir de ce shell constitue une méthode alternative pour démarrer un processus dans un groupe de contrôle particulier (reportez-vous à la Section 2.8, « Déplacer un processus sur un groupe de contrôle »). Par exemple :
~]# echo $$ > /cgroup/lab1/group1/tasks
lynx
Remarquez qu'après la fermeture de lynx, le shell existant se trouve toujours dans le groupe de contrôle group1. Ainsi, la méthode suivante est encore meilleure :
~]# sh -c "echo \$$ > /cgroup/lab1/group1/tasks && lynx"

2.9.1. Lancer un service dans un groupe de contrôle

Il est possible de démarrer certains services dans un groupe de contrôle. Les services pouvant être démarrés dans des groupes de contrôle doivent :
  • utiliser un fichier /etc/sysconfig/servicename
  • utiliser la fonction daemon() depuis /etc/init.d/functions pour démarrer le service
Pour lancer un service dans un groupe de contrôle, modifiez son fichier dans le répertoire /etc/sysconfig de manière à inclure une entrée sous la forme CGROUP_DAEMON="subsystem:control_group", où subsystem est un sous-système associé à une hiérarchie particulière, et où control_group est un groupe de contrôle dans cette hiérarchie. Par exemple :
CGROUP_DAEMON="cpuset:daemons/sql"