Предисловие: я не на 100 процентов знаком с systemd и концепциями файлов модулей, но я немного прочитал.
Контекст: я хочу переместить процесс из одного дерева cgroup в другое в дистрибутиве, где запущены systemd и (не systemd, скажем, upstart). Точнее, скажем, дерево cgroup выглядит следующим образом.
В основном иерархия выглядит так относительно my_root
my_root
|
______ ___________
| |
d11 d12
(P lives here) |
___________
| |
d21 d22
тогда P переходит под d21 или
my_root
|
______ ___________
| |
d11 d12
|
___________
| |
d21 d22
(P lives here now)
Для полноты картины допустим, что my_root = /sys/fs/cgroups/cpu,cpuacct/my_root
Давайте поговорим о несистемном сегменте: если я работаю в дистрибутиве, где нет systemd, я могу просто перенести pid P1
в cgroups.procs
из d21
и затем он перенесет мой процесс в эту cgroup.
А теперь сценарий использования systemd
, и в этом я не уверен, скажем, я делаю то же самое, что я делал выше, могут произойти две вещи.
- Процесс движется туда и остается там.
- Сначала процесс перемещается туда, но через некоторое время он либо возвращается, либо переходит в корневую группу для этого конкретного контроллера.
Я хочу избежать последнего.
По сути, я думаю, что когда я указываю файл модуля для своего приложения, я хочу взять на себя ответственность за cgroup, в которой запускается приложение, например, приложение становится владельцем группы my_root
, так что systemd не мешает перемещению процесса.
Теперь к многочастному вопросу.
- Действительно ли systemd удалит процесс из группы, в которую я его перенес?
- Если да, то что мне нужно сделать, чтобы стать владельцем группы в файле модуля. Я ищу некоторые конкретные примеры файлов модулей.
ресурс: https://www.freedesktop.org/wiki/Software/systemd/ControlGroupInterface/