From cd25cce98f5cc930202212c3c9c13605c09698b4 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Tue, 29 Mar 2011 23:31:38 +0200 Subject: [PATCH] exec: drop process group kill mode since it has little use and confuses the user --- TODO | 6 ------ man/systemctl.xml | 8 +++----- man/systemd.mount.xml | 1 - man/systemd.service.xml | 5 ----- man/systemd.socket.xml | 1 - man/systemd.swap.xml | 1 - src/execute.c | 1 - src/execute.h | 1 - src/mount.c | 6 ++---- src/service.c | 15 +++++---------- src/socket.c | 6 ++---- src/swap.c | 6 ++---- src/systemctl-bash-completion.sh | 2 +- units/console-shell.service.m4 | 2 +- units/emergency.service | 2 +- units/getty@.service.m4 | 2 +- units/rescue.service.m4 | 2 +- units/serial-getty@.service.m4 | 2 +- 18 files changed, 20 insertions(+), 49 deletions(-) diff --git a/TODO b/TODO index eeb6c072..4302eeef 100644 --- a/TODO +++ b/TODO @@ -12,8 +12,6 @@ F15: * hook emergency.target into local-fs.target in some way as OnFailure with isolate -* drop SIGHUP handling from rsyslog.service upstream (PENDING) - * teach dbus to activate all services it finds in /etc/systemd/services/org-*.service * save/restore tool for SysV as requested by FPC (PENDING) @@ -27,8 +25,6 @@ F15: * document default dependencies -* remove KillMode=process-group - * kernel patch wegen kmsg prio nach f15 * LOG_DAEMON/LOG_USER für kmsg messages schreiben @@ -41,8 +37,6 @@ Features: * when key file cannot be found, read it from kbd in cryptsetup -* hide passwords on TAB - * get rid of random file name in generator directory? /run/systemd/generator-IH1vFu diff --git a/man/systemctl.xml b/man/systemctl.xml index 535f9bd1..922fd2d6 100644 --- a/man/systemctl.xml +++ b/man/systemctl.xml @@ -304,13 +304,11 @@ kill, choose the mode how to kill the selected processes. Must be one of - , - or + or to select whether to kill the entire control - group, the process group or only the - selected process itself. If omitted - defaults to + group or only the selected process + itself. If omitted defaults to if is set, or diff --git a/man/systemd.mount.xml b/man/systemd.mount.xml index c7045e84..dd66d2ad 100644 --- a/man/systemd.mount.xml +++ b/man/systemd.mount.xml @@ -221,7 +221,6 @@ processes of this mount shall be killed. One of , - , , . diff --git a/man/systemd.service.xml b/man/systemd.service.xml index e444efeb..7458720a 100644 --- a/man/systemd.service.xml +++ b/man/systemd.service.xml @@ -558,7 +558,6 @@ processes of this service shall be killed. One of , - , , . @@ -570,10 +569,6 @@ stop command (as configured with ExecStop=) is executed. If set to - only - the members of the process group of - the main service process are - killed. If set to only the main process itself is killed. If set to no process is diff --git a/man/systemd.socket.xml b/man/systemd.socket.xml index 3b7581c5..8cbb512e 100644 --- a/man/systemd.socket.xml +++ b/man/systemd.socket.xml @@ -519,7 +519,6 @@ processes of this socket unit shall be killed. One of , - , , . diff --git a/man/systemd.swap.xml b/man/systemd.swap.xml index d95e39ed..3277ddbd 100644 --- a/man/systemd.swap.xml +++ b/man/systemd.swap.xml @@ -175,7 +175,6 @@ processes of this swap shall be killed. One of , - , , . diff --git a/src/execute.c b/src/execute.c index a467411f..cd44640a 100644 --- a/src/execute.c +++ b/src/execute.c @@ -1933,7 +1933,6 @@ DEFINE_STRING_TABLE_LOOKUP(exec_output, ExecOutput); static const char* const kill_mode_table[_KILL_MODE_MAX] = { [KILL_CONTROL_GROUP] = "control-group", - [KILL_PROCESS_GROUP] = "process-group", [KILL_PROCESS] = "process", [KILL_NONE] = "none" }; diff --git a/src/execute.h b/src/execute.h index 44856d11..208fe4ad 100644 --- a/src/execute.h +++ b/src/execute.h @@ -43,7 +43,6 @@ struct CGroupBonding; typedef enum KillMode { KILL_CONTROL_GROUP = 0, - KILL_PROCESS_GROUP, KILL_PROCESS, KILL_NONE, _KILL_MODE_MAX, diff --git a/src/mount.c b/src/mount.c index cc49b199..8528d17a 100644 --- a/src/mount.c +++ b/src/mount.c @@ -747,9 +747,7 @@ static void mount_enter_signal(Mount *m, MountState state, bool success) { state == MOUNT_REMOUNTING_SIGTERM) ? m->exec_context.kill_signal : SIGKILL; if (m->control_pid > 0) { - if (kill_and_sigcont(m->exec_context.kill_mode == KILL_PROCESS_GROUP ? - -m->control_pid : - m->control_pid, sig) < 0 && errno != ESRCH) + if (kill_and_sigcont(m->control_pid, sig) < 0 && errno != ESRCH) log_warning("Failed to kill control process %li: %m", (long) m->control_pid); else @@ -1684,7 +1682,7 @@ static int mount_kill(Unit *u, KillWho who, KillMode mode, int signo, DBusError } if (m->control_pid > 0) - if (kill(mode == KILL_PROCESS_GROUP ? -m->control_pid : m->control_pid, signo) < 0) + if (kill(m->control_pid, signo) < 0) r = -errno; if (mode == KILL_CONTROL_GROUP) { diff --git a/src/service.c b/src/service.c index 1735a96c..fd3a9c94 100644 --- a/src/service.c +++ b/src/service.c @@ -828,7 +828,7 @@ static int service_load_sysv_path(Service *s, const char *path) { s->exec_context.std_output = (s->meta.manager->sysv_console || s->exec_context.std_input == EXEC_INPUT_TTY) ? EXEC_OUTPUT_TTY : s->meta.manager->default_std_output; - s->exec_context.kill_mode = KILL_PROCESS_GROUP; + s->exec_context.kill_mode = KILL_PROCESS; /* We use the long description only if * no short description is set. */ @@ -1838,19 +1838,14 @@ static void service_enter_signal(Service *s, ServiceState state, bool success) { int sig = (state == SERVICE_STOP_SIGTERM || state == SERVICE_FINAL_SIGTERM) ? s->exec_context.kill_signal : SIGKILL; if (s->main_pid > 0) { - if (kill_and_sigcont(s->exec_context.kill_mode == KILL_PROCESS_GROUP ? - -s->main_pid : - s->main_pid, sig) < 0 && errno != ESRCH) - + if (kill_and_sigcont(s->main_pid, sig) < 0 && errno != ESRCH) log_warning("Failed to kill main process %li: %m", (long) s->main_pid); else wait_for_exit = true; } if (s->control_pid > 0) { - if (kill_and_sigcont(s->exec_context.kill_mode == KILL_PROCESS_GROUP ? - -s->control_pid : - s->control_pid, sig) < 0 && errno != ESRCH) + if (kill_and_sigcont(s->control_pid, sig) < 0 && errno != ESRCH) log_warning("Failed to kill control process %li: %m", (long) s->control_pid); else @@ -3212,11 +3207,11 @@ static int service_kill(Unit *u, KillWho who, KillMode mode, int signo, DBusErro } if (s->control_pid > 0) - if (kill(mode == KILL_PROCESS_GROUP ? -s->control_pid : s->control_pid, signo) < 0) + if (kill(s->control_pid, signo) < 0) r = -errno; if (s->main_pid > 0) - if (kill(mode == KILL_PROCESS_GROUP ? -s->main_pid : s->main_pid, signo) < 0) + if (kill(s->main_pid, signo) < 0) r = -errno; if (mode == KILL_CONTROL_GROUP) { diff --git a/src/socket.c b/src/socket.c index 9045a2fc..72be0e22 100644 --- a/src/socket.c +++ b/src/socket.c @@ -1040,9 +1040,7 @@ static void socket_enter_signal(Socket *s, SocketState state, bool success) { int sig = (state == SOCKET_STOP_PRE_SIGTERM || state == SOCKET_FINAL_SIGTERM) ? s->exec_context.kill_signal : SIGKILL; if (s->control_pid > 0) { - if (kill_and_sigcont(s->exec_context.kill_mode == KILL_PROCESS_GROUP ? - -s->control_pid : - s->control_pid, sig) < 0 && errno != ESRCH) + if (kill_and_sigcont(s->control_pid, sig) < 0 && errno != ESRCH) log_warning("Failed to kill control process %li: %m", (long) s->control_pid); else @@ -1837,7 +1835,7 @@ static int socket_kill(Unit *u, KillWho who, KillMode mode, int signo, DBusError } if (s->control_pid > 0) - if (kill(mode == KILL_PROCESS_GROUP ? -s->control_pid : s->control_pid, signo) < 0) + if (kill(s->control_pid, signo) < 0) r = -errno; if (mode == KILL_CONTROL_GROUP) { diff --git a/src/swap.c b/src/swap.c index 035efbaf..66bf5c2b 100644 --- a/src/swap.c +++ b/src/swap.c @@ -661,9 +661,7 @@ static void swap_enter_signal(Swap *s, SwapState state, bool success) { state == SWAP_DEACTIVATING_SIGTERM) ? s->exec_context.kill_signal : SIGKILL; if (s->control_pid > 0) { - if (kill_and_sigcont(s->exec_context.kill_mode == KILL_PROCESS_GROUP ? - -s->control_pid : - s->control_pid, sig) < 0 && errno != ESRCH) + if (kill_and_sigcont(s->control_pid, sig) < 0 && errno != ESRCH) log_warning("Failed to kill control process %li: %m", (long) s->control_pid); else @@ -1286,7 +1284,7 @@ static int swap_kill(Unit *u, KillWho who, KillMode mode, int signo, DBusError * } if (s->control_pid > 0) - if (kill(mode == KILL_PROCESS_GROUP ? -s->control_pid : s->control_pid, signo) < 0) + if (kill(s->control_pid, signo) < 0) r = -errno; if (mode == KILL_CONTROL_GROUP) { diff --git a/src/systemctl-bash-completion.sh b/src/systemctl-bash-completion.sh index f3420217..ae0ecb7b 100644 --- a/src/systemctl-bash-completion.sh +++ b/src/systemctl-bash-completion.sh @@ -60,7 +60,7 @@ _systemctl () { comps='all control main' ;; --kill-mode) - comps='control-group process process-group' + comps='control-group process' ;; --property|-p) comps='' diff --git a/units/console-shell.service.m4 b/units/console-shell.service.m4 index c98a08fc..cce2d5a5 100644 --- a/units/console-shell.service.m4 +++ b/units/console-shell.service.m4 @@ -31,7 +31,7 @@ WorkingDirectory=/root ExecStart=-/sbin/sulogin ExecStopPost=-/bin/systemctl poweroff StandardInput=tty-force -KillMode=process-group +KillMode=process # Bash ignores SIGTERM, so we send SIGHUP instead, to ensure that bash # terminates cleanly. diff --git a/units/emergency.service b/units/emergency.service index cb28a783..a97ec5e3 100644 --- a/units/emergency.service +++ b/units/emergency.service @@ -21,7 +21,7 @@ ExecStartPre=-/bin/echo 'Welcome to emergency mode. Use "systemctl default" or ^ ExecStart=-/sbin/sulogin ExecStopPost=/bin/systemctl --fail default StandardInput=tty-force -KillMode=process-group +KillMode=process # Bash ignores SIGTERM, so we send SIGHUP instead, to ensure that bash # terminates cleanly. diff --git a/units/getty@.service.m4 b/units/getty@.service.m4 index 1a8a6a0e..a9733a60 100644 --- a/units/getty@.service.m4 +++ b/units/getty@.service.m4 @@ -36,7 +36,7 @@ ExecStart=-/sbin/agetty %I 38400 Restart=always RestartSec=0 UtmpIdentifier=%I -KillMode=process-group +KillMode=process # Unset locale for the console getty since the console has problems # displaying some internationalized messages. diff --git a/units/rescue.service.m4 b/units/rescue.service.m4 index 969ac472..241c7507 100644 --- a/units/rescue.service.m4 +++ b/units/rescue.service.m4 @@ -28,7 +28,7 @@ ExecStart=-/bin/bash -c "exec ${SINGLE}"', `ExecStart=-/sbin/sulogin')) ExecStopPost=-/bin/systemctl --fail default StandardInput=tty-force -KillMode=process-group +KillMode=process # Bash ignores SIGTERM, so we send SIGHUP instead, to ensure that bash # terminates cleanly. diff --git a/units/serial-getty@.service.m4 b/units/serial-getty@.service.m4 index d42330a1..8b4f0fb9 100644 --- a/units/serial-getty@.service.m4 +++ b/units/serial-getty@.service.m4 @@ -36,7 +36,7 @@ ExecStart=-/sbin/agetty -s %I 115200,38400,9600 Restart=always RestartSec=0 UtmpIdentifier=%I -KillMode=process-group +KillMode=process # Some login implementations ignore SIGTERM, so we send SIGHUP # instead, to ensure that login terminates cleanly. -- 2.39.5