mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-03-10 00:58:20 +03:00
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) {
|
||||
char **e, **f = NULL;
|
||||
int i, r;
|
||||
char t[16];
|
||||
sigset_t ss;
|
||||
|
||||
/* child */
|
||||
@ -286,18 +285,23 @@ int exec_spawn(const ExecCommand *command, const ExecContext *context, int *fds,
|
||||
goto fail;
|
||||
}
|
||||
|
||||
snprintf(t, sizeof(t), "%i", context->oom_adjust);
|
||||
char_array_0(t);
|
||||
if (context->oom_adjust_set) {
|
||||
char t[16];
|
||||
|
||||
if (write_one_line_file("/proc/self/oom_adj", t) < 0) {
|
||||
r = EXIT_OOM_ADJUST;
|
||||
goto fail;
|
||||
snprintf(t, sizeof(t), "%i", context->oom_adjust);
|
||||
char_array_0(t);
|
||||
|
||||
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) {
|
||||
r = EXIT_NICE;
|
||||
goto fail;
|
||||
}
|
||||
if (context->nice_set)
|
||||
if (setpriority(PRIO_PROCESS, 0, context->nice) < 0) {
|
||||
r = EXIT_NICE;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if (close_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,
|
||||
"%sUmask: %04o\n"
|
||||
"%sDirectory: %s\n"
|
||||
"%sNice: %i\n"
|
||||
"%sOOMAdjust: %i\n",
|
||||
"%sDirectory: %s\n",
|
||||
prefix, c->umask,
|
||||
prefix, c->directory ? c->directory : "/",
|
||||
prefix, c->nice,
|
||||
prefix, c->oom_adjust);
|
||||
prefix, c->directory ? c->directory : "/");
|
||||
|
||||
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) {
|
||||
|
@ -44,9 +44,12 @@ struct ExecContext {
|
||||
char **environment;
|
||||
mode_t umask;
|
||||
struct rlimit *rlimit[RLIMIT_NLIMITS]; /* FIXME: load-fragment parser missing */
|
||||
char *directory;
|
||||
int oom_adjust;
|
||||
int nice;
|
||||
char *directory;
|
||||
|
||||
bool oom_adjust_set:1;
|
||||
bool nice_set:1;
|
||||
|
||||
ExecOutput output;
|
||||
int syslog_priority;
|
||||
|
@ -208,7 +208,8 @@ static int config_parse_nice(
|
||||
void *data,
|
||||
void *userdata) {
|
||||
|
||||
int *i = data, priority, r;
|
||||
ExecContext *c = data;
|
||||
int priority, r;
|
||||
|
||||
assert(filename);
|
||||
assert(lvalue);
|
||||
@ -225,7 +226,9 @@ static int config_parse_nice(
|
||||
return -ERANGE;
|
||||
}
|
||||
|
||||
*i = priority;
|
||||
c->nice = priority;
|
||||
c->nice_set = false;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -238,7 +241,8 @@ static int config_parse_oom_adjust(
|
||||
void *data,
|
||||
void *userdata) {
|
||||
|
||||
int *i = data, oa, r;
|
||||
ExecContext *c = data;
|
||||
int oa, r;
|
||||
|
||||
assert(filename);
|
||||
assert(lvalue);
|
||||
@ -255,7 +259,9 @@ static int config_parse_oom_adjust(
|
||||
return -ERANGE;
|
||||
}
|
||||
|
||||
*i = oa;
|
||||
c->oom_adjust = oa;
|
||||
c->oom_adjust_set = true;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -709,8 +715,8 @@ static int load_from_path(Unit *u, const char *path) {
|
||||
{ "User", config_parse_string, &(context).user, section }, \
|
||||
{ "Group", config_parse_string, &(context).group, section }, \
|
||||
{ "SupplementaryGroups", config_parse_strv, &(context).supplementary_groups, section }, \
|
||||
{ "Nice", config_parse_nice, &(context).nice, section }, \
|
||||
{ "OOMAdjust", config_parse_oom_adjust, &(context).oom_adjust, section }, \
|
||||
{ "Nice", config_parse_nice, &(context), section }, \
|
||||
{ "OOMAdjust", config_parse_oom_adjust, &(context), section }, \
|
||||
{ "UMask", config_parse_umask, &(context).umask, section }, \
|
||||
{ "Environment", config_parse_strv, &(context).environment, section }, \
|
||||
{ "Output", config_parse_output, &(context).output, section }, \
|
||||
|
Loading…
x
Reference in New Issue
Block a user