EACCESS写的/ proc /自/ oom_score_adj(EACCESS writing

2019-10-21 07:00发布

我想要编译“SLOCK”实施一些调整。 它无法启动,在此:

#ifdef __linux__
#include <fcntl.h>

static void
dontkillme(void) {
    int fd;

    fd = open("/proc/self/oom_score_adj", O_WRONLY);
    if (fd < 0 && errno == ENOENT)
        return;
    if (fd < 0 || write(fd, "-1000\n", 6) != 6 || close(fd) != 0)
        die("cannot disable the out-of-memory killer for this process\n");
}
#endif

我继续做了一些调试,并发现我得到EACCESS从write()

有什么收获? 我相信这是一些安全功能,因为它的不冷静如果进程可以修改这个值 - 但是我究竟做错了什么? 是否有二进制一些特殊的文件系统标志设置,让这项工作?

Answer 1:

综观Documentation/filesystems/proc.txt在内核:

的值/ proc /进程/ oom_score_adj可以不是由CAP_SYS_RESOURCE处理中设置的最后一个值被减小没有更低。 为了减少值低了,需要CAP_SYS_RESOURCE。

这意味着你必须是根或拥有CAP_SYS_RESOURCE能力在某些时候设置比默认这个要低。



文章来源: EACCESS writing /proc/self/oom_score_adj