2.8. Перенос процесса в контрольную группу

Процесс можно переместить с помощью команды cgclassify:
~]# cgclassify -g cpu,memory:group1 1701
Формат: cgclassify -g подсистемы:путь PID.
  • подсистемы — список подсистем, разделенных запятой. Если указать *, то будут выбраны все подсистемы, которым принадлежат указанные процессы. Если в разных иерархиях есть группы с одним и тем же именем, -g переместит процессы в каждую группу.
  • путь — путь к группе из корня иерархии.
  • PID — список идентификаторов процессов, разделенных запятой.
Дополнительный аргумент -- sticky перед идентификатором процесса оставляет дочерние процессы в текущей контрольной группе. Если аргумент не указан, и в то же время выполняется cgred, дочерние процессы будут переназначены в соответствии с настройками в /etc/cgrules.conf. Сам процесс будет оставаться в исходной контрольной группе.
С помощью cgclassify можно сразу переместить несколько процессов. Следующая команда переместит процессы с PID 1701 и 1138 в группу group1:
~]# cgclassify -g cpu,memory:group1 1701 1138
Идентификаторы процессов разделяются пробелом, а указанные группы должны принадлежать разным иерархиям.

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

Чтобы напрямую переместить процесс в группу, запишите его PID в файл tasks этой группы. Команда переноса процесса 1701 в /cgroup/lab1/group1/ будет выглядеть так:
~]# echo 1701 > /cgroup/lab1/group1/tasks

2.8.1. cgred

Служба cgred отвечает за перенос заданий в контрольные группы на основе заданных в /etc/cgrules.conf параметров. Записи в /etc/cgrules.conf могут следовать следующим форматам:
  • пользователь иерархии контрольная_группа
  • пользователь:команда иерархии контрольная_группа
Например:
maria			devices		/usergroup/staff
В этом примере все процессы, принадлежащие пользователю maria, будут обращаться к подсистеме devices в соответствии с заданными для группы /usergroup/staff параметрами. Чтобы сопоставить отдельные команды контрольным группам, укажите их после имени пользователя:
maria:ftp		devices		/usergroup/staff/ftp
То есть если пользователь maria выполняет команду ftp, процесс будет автоматически перемещен в группу /usergroup/staff/ftp в иерархии, содержащей подсистему devices. Стоит отметить, что перенос процесса будет осуществлен только при выполнении указанного условия, поэтому может оказаться так, что ftp некоторое время будет выполняться не в той группе. Более того, если процесс создает другие процессы во время выполнения в другой группе, нет гарантии, что дочерние процессы будут корректно перемещены.
Записи в /etc/cgrules.conf могут включать дополнительные выражения:
  • @ перед именем пользователя обозначает не отдельного пользователя, а группу. Например, @admins включает всех пользователей в группе admins.
  • * охватывает все компоненты. Так, * в поле подсистем обозначает все подсистемы.
  • % копирует элементы из предыдущей строки. Например:
    @adminstaff		devices		/admingroup
    @labstaff		%		%