からcgroupを作成しました/sys/fs/cgroup
。電話しましたが、root以外のユーザーが制御する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の所有権を変更すると、root権限の問題が解決されると思いましたが、実際には役に立ちませんでした。
それでは、rootユーザーを使用せずに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]
。