에서 cgroup을 만들었습니다 /sys/fs/cgroup
. 전화했는데 루트가 아닌 사용자가 제어 testGrp
해야 했기 때문에 전체 cgroup 디렉토리의 소유권을 변경했습니다.cgroup
/sys/fs/cgroup$ sudo chown -R normUser testGrp/
testGrp
내부의 모든 파일이 새 사용자의 소유인지 확인했으며 normUser
이 사용자는 실제로 일반 업데이트처럼 컨트롤러 파일을 변경할 수 io.max
있지만 cgroup.procs
.
/sys/fs/cgroup/testGrp$ ll cgroup.procs
-rw-r--r-- 1 normUser root 0 Aug 21 14:13 cgroup.procs
/sys/fs/cgroup/testGrp$ whoami
normUser
/sys/fs/cgroup/testGrp$ echo $$ > cgroup.procs
bash: echo: write error: Permission denied
cgroup의 소유권을 변경하면 루트 권한 문제가 해결될 것이라고 생각했지만 실제로는 도움이 되지 않았습니다.
그렇다면 루트 사용자를 사용하지 않고 cgroup을 제어하는 방법은 무엇입니까?
답변1
커널이 사용하는 규칙은 프로세스를 cgroup A에서 cgroup B로 이동하려면 먼저 해당 프로세스를 속한 cgroup으로 이동할 수 있는 권한이 있어야 한다는 것입니다.공통 조상A 및 B 둘.
systemd를 사용하고 초기 cgroup이 아래에 있다면 /user.slice/user-xxxx.slice/
가장 가까운 공통 조상은 /testGrp
이며 /
실제로 권한이 없습니다.
실제로 배포판에서 systemd를 사용하는 경우 systemd에 내장된 cgroup 계층 구조 관리를 사용하는 것이 좋습니다. 즉, .slice 단위를 생성하여 계층 구조를 정의한 다음 프로세스를 .scope 단위를 통해 .scope 단위로 이동하는 것입니다 systemd-run [--user]
.