머리말: 나는 systemd와 단위 파일의 개념에 100% 익숙하지는 않지만 어느 정도 읽어 보았습니다.
컨텍스트: systemd를 실행하는 distro에서 한 cgroup 트리에서 다른 cgroup 트리로 프로세스를 이동하고 싶습니다(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를 of P1
로 에코 하면 내 프로세스가 해당 cgroup으로 이동됩니다.cgroups.procs
d21
이제 systemd
사용 사례가 확실하지 않습니다. 위에서 했던 것과 동일한 작업을 수행한다고 가정해 보겠습니다. 두 가지 일이 발생할 수 있습니다.
- 프로세스는 그곳으로 이동하고 그대로 유지됩니다.
- 프로세스는 처음에는 그곳으로 이동하지만 잠시 후 다시 돌아가거나 해당 특정 컨트롤러에 대한 루트 cgroup으로 이동합니다.
나는 후자를 피하고 싶다. 기본적으로 내 애플리케이션에 대한 단위 파일을 지정할 때 애플리케이션이 시작되는 cgroup의 소유권을 가져오고 싶다고 생각합니다. 예를 들어 애플리케이션이 my_root
cgroup의 소유권을 가져서 systemd가 프로세스 이동을 방해하지 않도록 합니다.
이제 다중 부분 질문으로 넘어갑니다.
- systemd는 내가 옮긴 cgroup에서 프로세스를 정말로 옮길 수 있습니까?
- 그렇다면 유닛 파일에서 cgroup의 소유권을 얻으려면 어떻게 해야 합니까? 단위 파일의 구체적인 예를 찾고 있습니다.
자원 :https://www.freedesktop.org/wiki/Software/systemd/ControlGroupInterface/