Slightly safer OOM killer disablement in linux
This commit is contained in:
parent
754195f8d7
commit
0edbd2e016
1 changed files with 12 additions and 1 deletions
13
slock.c
13
slock.c
|
@ -60,16 +60,27 @@ die(const char *errstr, ...)
|
|||
|
||||
#ifdef __linux__
|
||||
#include <fcntl.h>
|
||||
#include <linux/oom.h>
|
||||
|
||||
static void
|
||||
dontkillme(void)
|
||||
{
|
||||
int fd;
|
||||
int length;
|
||||
char value[64];
|
||||
|
||||
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)
|
||||
|
||||
/* convert OOM_SCORE_ADJ_MIN to string for writing */
|
||||
length = snprintf(value, sizeof(value), "%d\n", OOM_SCORE_ADJ_MIN);
|
||||
|
||||
/* bail on truncation */
|
||||
if (length >= sizeof(value))
|
||||
die("buffer too small\n");
|
||||
|
||||
if (fd < 0 || write(fd, value, length) != length || close(fd) != 0)
|
||||
die("cannot disable the out-of-memory killer for this process\n");
|
||||
}
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue