2014-11-16 31 views
1

我想編譯「slock」來實現一些調整。它無法啓動,在此:EACCESS寫/ proc/self/oom_score_adj

#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。

有什麼收穫?我相信這是一些安全特性,因爲如果進程可以改變這個值,它並不酷,但是我做錯了什麼?要設置二進制文件,是否有一些特殊的文件系統標誌來實現這個功能?

回答

2

在內核綜觀Documentation/filesystems/proc.txt

的/ proc /進程/ oom_score_adj可以減少不低於 通過CAP_SYS_RESOURCE處理中設置的最後一個值的值。要降低值 任何更低的值需要CAP_SYS_RESOURCE。

這意味着您必須是root或具有CAP_SYS_RESOURCE功能才能將其設置爲低於默認值。

相關問題