Product SiteDocumentation Site

2.9. Avviare un proceso in un Control Group

Parametri necessari

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.
Fare riferimento al Capitolo 3, Sottosistemi e parametri regolabili per una descrizione dei parametri necessari per dati sottosistemi.
È 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:
È 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:
  • usare un file /etc/sysconfig/nome_di_servizio
  • usare la funzione daemon() da /etc/init.d/functions per avviare il servizio
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"