2.9. Запуск процесса в контрольной группе

Важно

Для некоторых подсистем существуют обязательные параметры, которые необходимо установить, прежде чем приступать к переносу заданий. Так, например, прежде чем перенести задание в группу, использующую подсистему cpuset, необходимо определить значения cpuset.cpus и cpuset.mems.
Приведенные в этой секции примеры будут работать при условии, что заданы обязательные параметры для используемых контроллеров.
Раздел 3.10, «Дополнительные ресурсы» содержит перечень параметров.
Для запуска процессов в контрольной группе используется cgexec. Ниже будет запущен браузер lynx в пределах группы group1. Этот процесс унаследует ограничения доступа, определенные подсистемой cpu для этой группы:
~]# cgexec -g cpu:group1 lynx http://www.redhat.com
Формат: cgexec -g подсистемы:путь команда аргументы.
  • подсистемы — список подсистем, разделенных запятой. Если указать *, будут выбраны все подсистемы, которым принадлежат указанные процессы. Если в разных иерархиях есть группы с одним и тем же именем, -g создаст процессы в каждой группе.
  • путь — путь к группе из корня иерархии.
  • команда — выполняемая команда.
  • аргументы — аргументы команды.
Дополнительный аргумент -- sticky перед командой оставляет дочерние процессы в текущей группе. Если аргумент не указан, и в то же время выполняется cgred, дочерние процессы будут переназначены в соответствии с настройками в /etc/cgrules.conf. Сам процесс будет оставаться в исходной контрольной группе.

Создание иерархии в оболочке

При запуске нового процесса он унаследует группу создавшего его процесса. Поэтому чтобы запустить процесс в выбранной группе, можно перенести в эту группу процесс оболочки (см. Раздел 2.8, «Перенос процесса в контрольную группу») и уже затем запустить процесс из этой оболочки.
~]# echo $$ > /cgroup/lab1/group1/tasks
lynx
После выхода из lynx оболочка все еще будет состоять в группе group1. Поэтому лучше предпочесть следующий метод:
~]# sh -c "echo \$$ > /cgroup/lab1/group1/tasks && lynx"

2.9.1. Запуск службы в контрольной группе

Требования к запускаемым в группе службам:
  • они должны использовать файл /etc/sysconfig/имя_службы;
  • для запуска должны использовать функцию daemon() из /etc/init.d/functions.
Чтобы запустить службу в контрольной группе, добавьте запись CGROUP_DAEMON="подсистема:группа" в ее файл /etc/sysconfig. Пример:
CGROUP_DAEMON="cpuset:daemons/sql"