我正在尝试编译“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。
有什么收获?我相信这是一些安全功能,因为如果流程可以改变这个价值并不酷 - 但我做错了什么?是否有一些特殊的文件系统标志要设置二进制文件?
答案 0 :(得分:2)
查看内核中的Documentation/filesystems/proc.txt
:
/ proc / pid / oom_score_adj的值可以降低不低于 CAP_SYS_RESOURCE进程设置的最后一个值。降低价值 任何较低的要求CAP_SYS_RESOURCE。
这意味着您必须是root用户或在某些时候具有CAP_SYS_RESOURCE功能才能将其设置为低于默认值。