set nice/oom_adjust only when asked for
This commit is contained in:
parent
d46de8a1a2
commit
fb33a393e2
42
execute.c
42
execute.c
|
@ -263,7 +263,6 @@ int exec_spawn(const ExecCommand *command, const ExecContext *context, int *fds,
|
||||||
if (pid == 0) {
|
if (pid == 0) {
|
||||||
char **e, **f = NULL;
|
char **e, **f = NULL;
|
||||||
int i, r;
|
int i, r;
|
||||||
char t[16];
|
|
||||||
sigset_t ss;
|
sigset_t ss;
|
||||||
|
|
||||||
/* child */
|
/* child */
|
||||||
|
@ -286,18 +285,23 @@ int exec_spawn(const ExecCommand *command, const ExecContext *context, int *fds,
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
snprintf(t, sizeof(t), "%i", context->oom_adjust);
|
if (context->oom_adjust_set) {
|
||||||
char_array_0(t);
|
char t[16];
|
||||||
|
|
||||||
if (write_one_line_file("/proc/self/oom_adj", t) < 0) {
|
snprintf(t, sizeof(t), "%i", context->oom_adjust);
|
||||||
r = EXIT_OOM_ADJUST;
|
char_array_0(t);
|
||||||
goto fail;
|
|
||||||
|
if (write_one_line_file("/proc/self/oom_adj", t) < 0) {
|
||||||
|
r = EXIT_OOM_ADJUST;
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (setpriority(PRIO_PROCESS, 0, context->nice) < 0) {
|
if (context->nice_set)
|
||||||
r = EXIT_NICE;
|
if (setpriority(PRIO_PROCESS, 0, context->nice) < 0) {
|
||||||
goto fail;
|
r = EXIT_NICE;
|
||||||
}
|
goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
if (close_fds(fds, n_fds) < 0 ||
|
if (close_fds(fds, n_fds) < 0 ||
|
||||||
shift_fds(fds, n_fds) < 0 ||
|
shift_fds(fds, n_fds) < 0 ||
|
||||||
|
@ -428,13 +432,19 @@ void exec_context_dump(ExecContext *c, FILE* f, const char *prefix) {
|
||||||
|
|
||||||
fprintf(f,
|
fprintf(f,
|
||||||
"%sUmask: %04o\n"
|
"%sUmask: %04o\n"
|
||||||
"%sDirectory: %s\n"
|
"%sDirectory: %s\n",
|
||||||
"%sNice: %i\n"
|
|
||||||
"%sOOMAdjust: %i\n",
|
|
||||||
prefix, c->umask,
|
prefix, c->umask,
|
||||||
prefix, c->directory ? c->directory : "/",
|
prefix, c->directory ? c->directory : "/");
|
||||||
prefix, c->nice,
|
|
||||||
prefix, c->oom_adjust);
|
if (c->nice_set)
|
||||||
|
fprintf(f,
|
||||||
|
"%sNice: %i\n",
|
||||||
|
prefix, c->nice);
|
||||||
|
|
||||||
|
if (c->oom_adjust_set)
|
||||||
|
fprintf(f,
|
||||||
|
"%sOOMAdjust: %i\n",
|
||||||
|
prefix, c->oom_adjust);
|
||||||
}
|
}
|
||||||
|
|
||||||
void exec_status_fill(ExecStatus *s, pid_t pid, int code, int status) {
|
void exec_status_fill(ExecStatus *s, pid_t pid, int code, int status) {
|
||||||
|
|
|
@ -44,9 +44,12 @@ struct ExecContext {
|
||||||
char **environment;
|
char **environment;
|
||||||
mode_t umask;
|
mode_t umask;
|
||||||
struct rlimit *rlimit[RLIMIT_NLIMITS]; /* FIXME: load-fragment parser missing */
|
struct rlimit *rlimit[RLIMIT_NLIMITS]; /* FIXME: load-fragment parser missing */
|
||||||
|
char *directory;
|
||||||
int oom_adjust;
|
int oom_adjust;
|
||||||
int nice;
|
int nice;
|
||||||
char *directory;
|
|
||||||
|
bool oom_adjust_set:1;
|
||||||
|
bool nice_set:1;
|
||||||
|
|
||||||
ExecOutput output;
|
ExecOutput output;
|
||||||
int syslog_priority;
|
int syslog_priority;
|
||||||
|
|
|
@ -208,7 +208,8 @@ static int config_parse_nice(
|
||||||
void *data,
|
void *data,
|
||||||
void *userdata) {
|
void *userdata) {
|
||||||
|
|
||||||
int *i = data, priority, r;
|
ExecContext *c = data;
|
||||||
|
int priority, r;
|
||||||
|
|
||||||
assert(filename);
|
assert(filename);
|
||||||
assert(lvalue);
|
assert(lvalue);
|
||||||
|
@ -225,7 +226,9 @@ static int config_parse_nice(
|
||||||
return -ERANGE;
|
return -ERANGE;
|
||||||
}
|
}
|
||||||
|
|
||||||
*i = priority;
|
c->nice = priority;
|
||||||
|
c->nice_set = false;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -238,7 +241,8 @@ static int config_parse_oom_adjust(
|
||||||
void *data,
|
void *data,
|
||||||
void *userdata) {
|
void *userdata) {
|
||||||
|
|
||||||
int *i = data, oa, r;
|
ExecContext *c = data;
|
||||||
|
int oa, r;
|
||||||
|
|
||||||
assert(filename);
|
assert(filename);
|
||||||
assert(lvalue);
|
assert(lvalue);
|
||||||
|
@ -255,7 +259,9 @@ static int config_parse_oom_adjust(
|
||||||
return -ERANGE;
|
return -ERANGE;
|
||||||
}
|
}
|
||||||
|
|
||||||
*i = oa;
|
c->oom_adjust = oa;
|
||||||
|
c->oom_adjust_set = true;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -709,8 +715,8 @@ static int load_from_path(Unit *u, const char *path) {
|
||||||
{ "User", config_parse_string, &(context).user, section }, \
|
{ "User", config_parse_string, &(context).user, section }, \
|
||||||
{ "Group", config_parse_string, &(context).group, section }, \
|
{ "Group", config_parse_string, &(context).group, section }, \
|
||||||
{ "SupplementaryGroups", config_parse_strv, &(context).supplementary_groups, section }, \
|
{ "SupplementaryGroups", config_parse_strv, &(context).supplementary_groups, section }, \
|
||||||
{ "Nice", config_parse_nice, &(context).nice, section }, \
|
{ "Nice", config_parse_nice, &(context), section }, \
|
||||||
{ "OOMAdjust", config_parse_oom_adjust, &(context).oom_adjust, section }, \
|
{ "OOMAdjust", config_parse_oom_adjust, &(context), section }, \
|
||||||
{ "UMask", config_parse_umask, &(context).umask, section }, \
|
{ "UMask", config_parse_umask, &(context).umask, section }, \
|
||||||
{ "Environment", config_parse_strv, &(context).environment, section }, \
|
{ "Environment", config_parse_strv, &(context).environment, section }, \
|
||||||
{ "Output", config_parse_output, &(context).output, section }, \
|
{ "Output", config_parse_output, &(context).output, section }, \
|
||||||
|
|
Loading…
Reference in New Issue