Go语言 将当前进程pid写入cgroups.procs失败,出现权限被拒绝错误

uinbv5nw  于 2023-03-10  发布在  Go
关注(0)|答案(3)|浏览(299)

我试图将pid写入手动创建的cgroup,但无法执行此操作。
在编写时,我收到以下错误:

open /sys/fs/cgroup/pids/scratch-container-cgroup0049cba7-8f9e-42ec-9646-9b1babbfebc3/cgroups.procs: permission denied

该文件具有以下权限:

[~~]$ ls -l cgroup.procs
-rw-r--r-- 1 root root 0 Feb 14 23:27 cgroup.procs
[~~]$

我在Go语言中编写的代码如下所示

procs := filepath.Join(containerCgroupPath, "cgroups.procs")
    currentPid := strconv.Itoa(os.Getpid())
    log.Printf("current pid is %s", currentPid)
    if err := ioutil.WriteFile(procs, []byte(currentPid), 0777); err != nil {
        return err
    }

但是,使用bash也会产生相同的错误。

sudo echo "100" > cgroup.procs 
bash: cgroup.procs: Permission denied

我不知道我在这里错过了什么关于cgroups可以用来写。我在Centos上运行systemd。
我可以写入pids.maxnotify_on_release
我真的很欣赏这里的见解。

q5lcpyga

q5lcpyga1#

不能谈论go代码,但bash中的问题很可能归结为以下几点:
How do I use sudo to redirect output to a location I don't have permission to write to?
如果这对您没有帮助,请检查您是否有权限写入进程100echo /proc/100/cgroup)的公共父进程中的cgroup.procs文件以及您要将其移动到的cgroup(/sys/fs/cgroup/pids/scratch-container-cgroup0049cba7-8f9e-42ec-9646-9b1babbfebc3/)。

yws3nbqq

yws3nbqq2#

代码中正确的文件名应该是“cgroup.procs”而不是“cgroups.procs”

tkqqtvp1

tkqqtvp13#

我也遇到过同样的问题。我尝试了以下方法,效果很好

echo "100" | sudo tee cgroup.procs

但我无法解释原因。

相关问题