]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/systemctl/systemctl-kill.c
Merge pull request #22791 from keszybz/bootctl-invert-order
[thirdparty/systemd.git] / src / systemctl / systemctl-kill.c
CommitLineData
db9ecf05 1/* SPDX-License-Identifier: LGPL-2.1-or-later */
daf71ef6
LP
2
3#include "bus-error.h"
4#include "bus-locator.h"
5#include "systemctl-kill.h"
6#include "systemctl-util.h"
7#include "systemctl.h"
8
32baf64d 9int verb_kill(int argc, char *argv[], void *userdata) {
daf71ef6 10 _cleanup_strv_free_ char **names = NULL;
de010b0b 11 char *kill_who = NULL;
daf71ef6
LP
12 sd_bus *bus;
13 int r, q;
14
15 r = acquire_bus(BUS_MANAGER, &bus);
16 if (r < 0)
17 return r;
18
19 polkit_agent_open_maybe();
20
21 if (!arg_kill_who)
22 arg_kill_who = "all";
23
24 /* --fail was specified */
a88f9dba 25 if (streq(arg_job_mode(), "fail"))
daf71ef6
LP
26 kill_who = strjoina(arg_kill_who, "-fail");
27
28 r = expand_unit_names(bus, strv_skip(argv, 1), NULL, &names, NULL);
29 if (r < 0)
30 return log_error_errno(r, "Failed to expand names: %m");
31
32 STRV_FOREACH(name, names) {
33 _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
34
35 q = bus_call_method(
36 bus,
37 bus_systemd_mgr,
38 "KillUnit",
39 &error,
40 NULL,
41 "ssi", *name, kill_who ? kill_who : arg_kill_who, arg_signal);
42 if (q < 0) {
43 log_error_errno(q, "Failed to kill unit %s: %s", *name, bus_error_message(&error, q));
44 if (r == 0)
45 r = q;
46 }
47 }
48
49 return r;
50}