`loginctl kill-session --kill-whom=leader <N>` (or the D-Bus equivalent)
doesn't work because logind ends up calling `KillUnit(..., "main", ...)`
on a scope unit and these don't have a `MainPID` property. Here, I just
make it send a signal to the `Leader` directly.
(cherry picked from commit
8254755091847105c33e473c62cdc7621ed275bc)
int session_kill(Session *s, KillWho who, int signo) {
assert(s);
- if (!s->scope)
- return -ESRCH;
+ switch (who) {
+
+ case KILL_ALL:
+ if (!s->scope)
+ return -ESRCH;
+
+ return manager_kill_unit(s->manager, s->scope, KILL_ALL, signo, NULL);
- return manager_kill_unit(s->manager, s->scope, who, signo, NULL);
+ case KILL_LEADER:
+ return pidref_kill(&s->leader, signo);
+
+ default:
+ assert_not_reached();
+ }
}
static int session_open_vt(Session *s, bool reopen) {