mirror of
https://github.com/systemd/systemd-stable.git
synced 2024-10-27 01:55:32 +03:00
execute: reopen console in the spawned processes, if necessary
This commit is contained in:
parent
ca9a0317a4
commit
ff876e283a
11
fixme
11
fixme
@ -9,6 +9,9 @@
|
||||
* implicitly import "defaults" settings file into all types
|
||||
|
||||
* write .service file install tool
|
||||
[Install]
|
||||
WantedBy=graphical.target
|
||||
Names=prefdm.service
|
||||
|
||||
* service startup should be delayed if the matching socket is being started
|
||||
|
||||
@ -18,16 +21,10 @@
|
||||
|
||||
* bootchart hookup
|
||||
|
||||
* dbus.service and syslog.service should be symlinked not ifdef to the right distro-specific names
|
||||
|
||||
* reinvestigate random seed, hwclock
|
||||
|
||||
* rework sysv stuff to have SPECIAL_SYSV_BEFORE, SPECIAL_SYSV_AFTER instead SPECIAL_RCSYSINIT
|
||||
|
||||
* introduce serialized mode
|
||||
|
||||
* when refusing start due to ratelimit, enter restart state
|
||||
|
||||
* "disabled" load state?
|
||||
|
||||
* uid are 32bit
|
||||
@ -38,8 +35,6 @@
|
||||
|
||||
* iCalendar semantics for the timer stuff (RFC2445)
|
||||
|
||||
* autofs für /dev/mqueue usw.
|
||||
|
||||
* provide sysv-like command line utilities
|
||||
|
||||
* Add OnlyByDependency
|
||||
|
@ -301,10 +301,15 @@ 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 (is_terminal_input(i) || i == EXEC_INPUT_SOCKET)
|
||||
if (i != EXEC_INPUT_NULL)
|
||||
return dup2(STDIN_FILENO, STDOUT_FILENO) < 0 ? -errno : STDOUT_FILENO;
|
||||
|
||||
return STDIN_FILENO;
|
||||
/* For PID 1 stdout is always connected to /dev/null,
|
||||
* hence reopen the console if necessary. */
|
||||
if (getpid() == 1)
|
||||
return open_terminal_as(tty_path(context), O_WRONLY, STDOUT_FILENO);
|
||||
|
||||
return STDOUT_FILENO;
|
||||
|
||||
case EXEC_OUTPUT_NULL:
|
||||
return open_null_as(O_WRONLY, STDOUT_FILENO);
|
||||
@ -346,7 +351,8 @@ 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 &&
|
||||
!is_terminal_input(i))
|
||||
i != EXEC_INPUT_NULL &&
|
||||
getpid () != 1)
|
||||
return STDERR_FILENO;
|
||||
|
||||
/* Duplicate form stdout if possible */
|
||||
@ -1076,11 +1082,6 @@ void exec_context_init(ExecContext *c) {
|
||||
c->cpu_sched_policy = SCHED_OTHER;
|
||||
c->syslog_priority = LOG_DAEMON|LOG_INFO;
|
||||
c->mount_flags = MS_SHARED;
|
||||
|
||||
c->std_input = EXEC_INPUT_NULL;
|
||||
c->std_output = c->std_error =
|
||||
(log_get_target() == LOG_TARGET_CONSOLE ? EXEC_OUTPUT_INHERIT :
|
||||
log_get_target() == LOG_TARGET_KMSG ? EXEC_OUTPUT_KMSG : EXEC_OUTPUT_SYSLOG);
|
||||
}
|
||||
|
||||
void exec_context_done(ExecContext *c) {
|
||||
|
@ -632,11 +632,6 @@ static int service_load_sysv_path(Service *s, const char *path) {
|
||||
s->valid_no_process = true;
|
||||
s->kill_mode = KILL_PROCESS_GROUP;
|
||||
|
||||
/* For SysV services log output should go to the console */
|
||||
s->exec_context.std_input = EXEC_INPUT_NULL;
|
||||
s->exec_context.std_output = EXEC_OUTPUT_TTY;
|
||||
s->exec_context.std_error = EXEC_OUTPUT_TTY;
|
||||
|
||||
u->meta.load_state = UNIT_LOADED;
|
||||
r = 0;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user