2.8. Spostare un processo su di un Control Group
È possibile spostare un processo in un cgroup, eseguendo il comando cgclassify
:
~]# cgclassify -g cpu,memory:group1 1701
La sintassi per cgclassify
è:
cgclassify -g
sottosistemi
:percorso_a_cgroup
pidlist
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 se in gerarchie multiple esistono cgroups con lo stesso nome, l'opzione -g
sposta i processi all'interno di ogni gruppo. Assicurarsi dell'esistenza del cgroup all'interno di ogni gerarchia dei sottosistemi qui specificati.
percorso_a_cgroup
è il percorso al cgroup all'interno della propria gerarchia
pidlist
è un elenco separato da spazio di process identifier (PID)
È possibile anche aggiungere l'opzione -- sticky
prima del pid
per mantenere ogni 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
. Il processo tuttavia resterà nel cgroup nel quale è stato avviato.
Usando cgclassify
è possibile spostare simultaneamente numerosi processi. Per esempio questo comando sposta i processi con PID 1701
e 1138
nel cgroup group1/
:
~]# cgclassify -g cpu,memory:group1 1701 1138
Da notare che i PID da spostare sono separati da spazi ed i gruppi specificati devono essere in gerarchie diverse.
Metodo alternativo
Per spostare un processo in un cgroup scrivere il rispettivo (PID) sul file tasks
del cgroup. Per esempio per spostare un processo con PID 1701
in un cgroup su /cgroup/lab1/group1/
:
~]# echo 1701 > /cgroup/lab1/group1/tasks
Cgred è un demone usato per spostare i task all'interno dei cgroup in base ai parametri impostati nel file /etc/cgrules.conf
. Le voci nel file /etc/cgrules.conf
possono avere una delle seguenti forme:
Per esempio:
maria devices /usergroup/staff
Questa voce specifica che qualsiasi processo appartenente all'utente maria
è in grado di accedere al sottosistema devices in base ai parametri specificati nel cgroup /usergroup/staff
. Per associare comandi specifici con cgroup particolari aggiungere il parametro comando
nel modo seguente:
maria:ftp devices /usergroup/staff/ftp
La voce ora specifica che quando un utente chiamato maria
utilizza il comando ftp
, il processo viene spostato automaticamente sul cgroup /usergroup/staff/ftp
nella gerarchia che contiene il sottosistema devices
. Da notare tuttavia che il demone sposta il processo sul cgroup solo dopo aver soddisfatto la condizione corretta. Per questo motivo il processo ftp
potrebbe essere eseguito per un breve periodo di tempo nel gruppo incorretto. Altresì se il processo genera processi figlio nel gruppo incorretto, i suddetti processi non potranno essere spostati.
Le voci presenti all'interno del file /etc/cgrules.conf
possono includere quanto di seguito riportato:
@
— quando prefisso a utente
, indica un gruppo invece di un utente singolo. Per esempio, @admins
sono tutti utenti nel gruppo admins
.
*
— rappresenta "tutti". Per esempio, *
nel campo subsystem
rappresenta tutti i sottosistemi.
%
— rappresenta un oggetto uguale a quello riportato nella riga superiore. Per esempio:
@adminstaff devices /admingroup
@labstaff % %