我正在尝试使用 cgroups v2 限制进程的 CPU 使用率。层次结构已经创建并设置了限制,我只需要将 pid 写入 cgroup.procs 文件。路径是/sys/fs/cgroup/system.slice/myfolder/myfolder/myfolder/cgroup.procs
。所有myfolder的权限都是drwxr-xr-x myuser mygroup
. cgroup.procs 文件的权限是-rwxrwxrwx myuser mygroup
. 然而,当尝试执行以下命令时:
sudo -H -u myuser bash -c 'echo some_existing_pid > /sys/fs/cgroup/system.slice/myfolder/myfolder/myfolder/cgroup.procs'
我收到以下错误:
bash: line 1: echo: write error: Permission denied
这可能是什么原因?
操作系统:Ubuntu 22.04
我的第一个猜测是您不允许将进程移出它们原来的 cgroup。内核使用的规则是,为了将进程从 cgroup A 迁移到 cgroup B,您必须首先具有将其迁移到作为A 和 B 的共同祖先的 cgroup 的权限。
(我可能会推荐使用 systemd 内置的 cgroup 层次结构管理,即创建 .slice 单元来定义层次结构,然后通过 .scope 将进程移动到 .scope 单元中
systemd-run
。)