2.9. Avviare un proceso in un Control Group
Alcuni sottosistemi presentano parametri obbligatori da impostare prima di spostare un task in un cgroup che utilizza uno qualsiasi di questi sottosistemi. Per esempio, prima di spostare un task in un cgroup che utilizza il sottosistema cpuset
è necessario definire i parametri cpuset.cpus
e cpuset.mems
per quel cgroup.
Gli esempi presenti in questa pagina riportano la sintassi corretta per il comando, ma funzionano solo su sistemi sui quali i rilevanti parametri obbligatori sono stati impostati per ogni controller usato negli esempi. Se non si è ancora configurato i rilevanti controller, non sarà possibile copiare i comandi d'esempio direttamente da questa sezione poichè essi non funzioneranno correttamente sul proprio sistema.
È possibile lanciare i processi in un cgroup usando il comando cgexec
. Per esempio, questo comando lancia il web browser lynx nel cgroup group1
, con tutte le limitazioni imposte su quel gruppo da cpu
:
~]# cgexec -g cpu:group1 lynx http://www.redhat.com
La sintassi per cgexec
è:
cgexec -g
sottosistemi
:percorso_a_cgroup
comando
argomenti
dove:
sottosistemi
è un elenco separato da virgole di sottosistemi, o
*
per lanciare il processo nelle gerarchie associate con tutti i sottosistemi disponibili. Da notare che, in modo simile a
cgset
descritto nella
Sezione 2.7, «Impostare parametri», se all'interno delle gerarchie esistono cgroups con lo stesso nome, l'opzione
-g
crea processi in ciascuno di questi gruppi. Assicurarsi dell'esistenza del cgroup all'interno di ogni gerarchia dei sottosistemi qui specificati.
percorso_a_cgroup
è il percorso al cgroup relativo alla gerarchia.
comando
è il comando da eseguire.
argomenti
sono gli argomenti del comando.
È possibile aggiungere l'opzione -- sticky
prima del comando
per mantenere qualsiasi processo figlio nello stesso cgroup. Se tale opzione non viene impostata ed il demone cgred è in esecuzione, i processi figlio verranno assegnati ai cgroup in base alle impostazioni presenti in /etc/cgrules.conf
. Comunque il processo stesso, resterà nel cgroup nel quale è stato avviato.
Metodo alternativo
Al suo avvio, il nuovo processo eredita il gruppo del processo genitore interessato. Un metodo alternativo per l'avvio di un processo in un cgroup, particolare, è di spostare il processo di shell sul gruppo (consultare la
Sezione 2.8, «Spostare un processo su di un Control Group»), e successivamente lanciare il processo dalla shell. Per esempio:
~]# echo $$ > /cgroup/lab1/group1/tasks
lynx
Dopo aver esser uscito da lynx, la shell esistente è ancora nel cgroup group1
. Per questo un metodo migliore potrebbe essere:
~]# sh -c "echo \$$ > /cgroup/lab1/group1/tasks && lynx"
2.9.1. Avviare un servizio in un Control Group
All'interno di un cgroup è possibile avviare determinati servizi. I servizi avviabili devono:
Per avviare un servizio in un cgroup, modificare il file relativo in /etc/sysconfig
in modo da includere una voce nel formato CGROUP_DAEMON="sottosistema
:control_group
"
, dove sottosistema
è un sottosistema associato con una gerarchia particolare, e control_group
è un cgroup in quella gerarchia. Per esempio:
CGROUP_DAEMON="cpuset:daemons/sql"