EACCESS写/ proc / self / oom_score_adj

时间:2014-11-16 22:27:01

标签: linux permissions memory proc

我正在尝试编译“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

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

有什么收获?我相信这是一些安全功能,因为如果流程可以改变这个价值并不酷 - 但我做错了什么?是否有一些特殊的文件系统标志要设置二进制文件?

1 个答案:

答案 0 :(得分:2)

查看内核中的Documentation/filesystems/proc.txt

  

/ proc / pid / oom_score_adj的值可以降低不低于   CAP_SYS_RESOURCE进程设置的最后一个值。降低价值   任何较低的要求CAP_SYS_RESOURCE。

这意味着您必须是root用户或在某些时候具有CAP_SYS_RESOURCE功能才能将其设置为低于默认值。