diff options
author | Lennart Poettering <lennart@poettering.net> | 2010-07-07 04:37:42 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2010-07-07 04:37:42 +0200 |
commit | acb591e4523af82be3d76fde342e91c90a4bed38 (patch) | |
tree | 1e6306d013be64b2c20a3be98454ab10710a3796 /src | |
parent | ecdbca40bd985f269cd77fc122a648630f330c28 (diff) |
execute: change stdout inherit logic, when run as PID 1 use /dev/null
Diffstat (limited to 'src')
-rw-r--r-- | src/execute.c | 14 | ||||
-rw-r--r-- | src/service.c | 1 |
2 files changed, 8 insertions, 7 deletions
diff --git a/src/execute.c b/src/execute.c index 2acb11192d..d7239d5440 100644 --- a/src/execute.c +++ b/src/execute.c @@ -305,16 +305,16 @@ static int setup_output(const ExecContext *context, int socket_fd, const char *i case EXEC_OUTPUT_INHERIT: - /* If the input is connected to a terminal, inherit that... */ + /* If the input is connected to anything that's not a /dev/null, inherit that... */ if (i != EXEC_INPUT_NULL) return dup2(STDIN_FILENO, STDOUT_FILENO) < 0 ? -errno : STDOUT_FILENO; - /* For PID 1 stdout is always connected to /dev/null, - * hence reopen the console if out parent is PID1. */ - if (getppid() == 1) - return open_terminal_as(tty_path(context), O_WRONLY, STDOUT_FILENO); + /* If we are not started from PID 1 we just inherit STDOUT from our parent process. */ + if (getppid() != 1) + return STDOUT_FILENO; - return STDOUT_FILENO; + /* We need to open /dev/null here anew, to get the + * right access mode. So we fall through */ case EXEC_OUTPUT_NULL: return open_null_as(O_WRONLY, STDOUT_FILENO); @@ -356,7 +356,7 @@ static int setup_error(const ExecContext *context, int socket_fd, const char *id * the way and are not on a tty */ if (e == EXEC_OUTPUT_INHERIT && o == EXEC_OUTPUT_INHERIT && - i != EXEC_INPUT_NULL && + i == EXEC_INPUT_NULL && getppid () != 1) return STDERR_FILENO; diff --git a/src/service.c b/src/service.c index ecfd054105..9086590cbb 100644 --- a/src/service.c +++ b/src/service.c @@ -686,6 +686,7 @@ static int service_load_sysv_path(Service *s, const char *path) { s->valid_no_process = true; s->kill_mode = KILL_PROCESS_GROUP; s->restart = SERVICE_ONCE; + s->exec_context.std_output = EXEC_OUTPUT_TTY; u->meta.load_state = UNIT_LOADED; r = 0; |