diff --git a/src/login/logind-session.c b/src/login/logind-session.c index 4758cb9ff1b..5f4c13652f5 100644 --- a/src/login/logind-session.c +++ b/src/login/logind-session.c @@ -1384,10 +1384,20 @@ SessionState session_get_state(Session *s) { int session_kill(Session *s, KillWho who, int signo) { assert(s); - if (!s->scope) - return -ESRCH; + switch (who) { - return manager_kill_unit(s->manager, s->scope, who, signo, NULL); + case KILL_ALL: + if (!s->scope) + return -ESRCH; + + return manager_kill_unit(s->manager, s->scope, KILL_ALL, signo, NULL); + + case KILL_LEADER: + return pidref_kill(&s->leader, signo); + + default: + assert_not_reached(); + } } static int session_open_vt(Session *s, bool reopen) {