From acb591e4523af82be3d76fde342e91c90a4bed38 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 7 Jul 2010 04:37:42 +0200 Subject: [PATCH] execute: change stdout inherit logic, when run as PID 1 use /dev/null --- src/execute.c | 14 +++++++------- src/service.c | 1 + 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/execute.c b/src/execute.c index 2acb1119..d7239d54 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 ecfd0541..9086590c 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; -- 2.39.5