|
|
|
@ -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 |
|
|
|
|