Prefácio: Não estou 100% familiarizado com o systemd e os conceitos de arquivos unitários, mas fiz algumas leituras.
Contexto: Quero mover um processo de uma árvore cgroup para outra, em uma distribuição executando o systemd e (não-systemd, digamos, iniciante). Mais especificamente, digamos que a árvore do cgroup se pareça com isto.
Basicamente a hierarquia se parece com isto em relação a my_root
my_root
|
______ ___________
| |
d11 d12
(P lives here) |
___________
| |
d21 d22
então P se move sob d21 ou
my_root
|
______ ___________
| |
d11 d12
|
___________
| |
d21 d22
(P lives here now)
Para completar, digamos
my_root = /sys/fs/cgroups/cpu,cpuacct/my_root
Vamos falar sobre o bucket que não é do systemd: se eu estiver executando em uma distribuição que não esteja executando o systemd, posso simplesmente repetir o pid de P1
into cgroups.procs
of d21
e então ele moverá meu processo para aquele cgroup.
E agora o systemd
caso de uso, e é disso que não tenho certeza, digamos que faço a mesma coisa que fiz acima, há duas coisas que podem acontecer.
- O processo se move para lá e permanece lá.
- O processo se move para lá inicialmente, mas depois de algum tempo ele volta ou vai para o cgroup root daquele controlador específico.
Eu quero evitar o último. Basicamente, estou pensando que quando estou especificando o arquivo unitário para meu aplicativo, quero apropriar-me do cgroup em que o aplicativo é iniciado, por exemplo, o aplicativo assume a propriedade do my_root
cgroup, para que o systemd não interfira na movimentação do processo.
Agora, para a questão multiparte.
- O systemd realmente afastará o processo do cgroup para o qual eu o movi?
- Se sim, o que preciso fazer para apropriar-me do cgroup no arquivo da unidade. Estou procurando alguns exemplos específicos de arquivos de unidade.
recurso :https://www.freedesktop.org/wiki/Software/systemd/ControlGroupInterface/