Como sabemos, cgroups
pode limitar o uso da CPU de processos. Aqui está um exemplo:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
30142 root 20 0 104m 2520 1024 R 99.7 0.1 14:38.97 sh
Tenho um processo, cujo pid é 30142. Posso limitá-lo conforme abaixo:
mkdir -p /sys/fs/cgroup/memory/foo
echo 1048576 > /cgroup/memory/foo/memory.limit_in_bytes
echo 30142 > /cgroup/memory/foo/tasks
Como vemos, se eu quiser limitar um processo, primeiro tenho que executá-lo e depois posso limitá-lo de acordo com seu pid. É possível limitar um processo de acordo com seu nome? É possível limitar um processo antes de executá-lo?
Os grupos de controle são baseados em pid e não há uma maneira direta de limitar os processos pelo nome. (Como os grupos de controle são hierárquicos, isso faz sentido: um grupo também contém os futuros filhos de seus processos membros, por padrão, e tê-los reanexados a outro grupo com base em seu nome seria surpreendente.)
A maneira típica de usar grupos de controle é anexar um processo pai a eles e, em seguida, confiar no fato de que os filhos herdam o grupo de seus pais. No entanto existe uma ferramenta que lhe permitirá iniciar um processo num determinado grupo,
cgexec
:No Debian você encontrará isso em
cgroup-tools
.