You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 22.04.1下以root身份操作cgroup cpu子系统时遇权限拒绝问题求助

解决Ubuntu 22.04下Cgroup操作权限拒绝及删除失败问题

你遇到的问题核心原因是Ubuntu 22.04默认使用Cgroup v2,而你沿用了Cgroup v1的操作习惯——两者的文件结构、参数命名和操作逻辑有很大差异,导致一系列权限和操作错误。下面详细拆解原因并给出对应解决方案:

一、为什么编辑tasks/cpu.shares会报错?

  1. 文件根本不存在:Cgroup v2已经移除了v1中的tasks和cpu.shares文件:
    • 替代tasks的是cgroup.procs(用于添加进程组)和cgroup.threads(用于添加单个线程);
    • 替代cpu.shares的是cpu.weight(权重范围1-10000,默认值100,对应v1的cpu.shares=1024比例)。
  2. 错误的创建尝试:当你执行echo 2472 > tasks时,bash会尝试在当前目录创建一个名为tasks的普通文件,但/sys/fs/cgroup是内核挂载的cgroupfs文件系统,不允许用户手动创建文件(只能由内核自动生成),因此即使是root也会触发"Permission denied"。

二、为什么看不到tasks和cpu.shares?

完全是因为Cgroup v2的结构变更——这两个文件在v2中被彻底移除了,和是否添加PID无关。你可以通过ls /sys/fs/cgroup/test查看v2下的标准文件列表,会看到cgroup.procs、cpu.weight等替代文件。

三、为什么无法删除test文件夹?

你用了错误的删除命令:

  • Cgroup是内核管理的特殊目录对象,不能用rm -rf直接删除(目录内的文件都是内核生成的,无法手动删除);
  • 删除Cgroup的前提是:该Cgroup内没有任何进程/线程,也没有子Cgroup;
  • 正确的删除方式是用rmdir,但必须先清空Cgroup内的进程。

正确的Cgroup v2操作流程

1. 确认当前Cgroup版本

先验证系统确实在使用v2:

mount | grep cgroup2

如果输出包含cgroup2 on /sys/fs/cgroup type cgroup2,说明是v2环境。

2. 创建并配置Cgroup

# 1. 创建test cgroup
sudo mkdir /sys/fs/cgroup/test

# 2. 确保CPU控制器已启用(v2默认可能不启用所有控制器)
# 先查看父cgroup的控制器状态
cat /sys/fs/cgroup/cgroup.subtree_control
# 如果输出里没有`cpu`,执行以下命令添加
sudo echo "+cpu" > /sys/fs/cgroup/cgroup.subtree_control

# 3. 添加进程到test cgroup(替换2472为你的PID)
sudo echo 2472 > /sys/fs/cgroup/test/cgroup.procs

# 4. 设置CPU权重(替换500为你需要的权重,范围1-10000)
sudo echo 500 > /sys/fs/cgroup/test/cpu.weight

3. 正确删除test Cgroup

# 1. 先把test cgroup内的所有进程移回根cgroup
sudo cat /sys/fs/cgroup/test/cgroup.procs | xargs -I {} sudo echo {} > /sys/fs/cgroup/cgroup.procs

# 2. 用rmdir删除空的cgroup目录
sudo rmdir /sys/fs/cgroup/test

内容的提问来源于stack exchange,提问作者Vipin Menon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 17:57:27