]>
git.ipfire.org Git - thirdparty/systemd.git/blob - src/systemctl/systemctl-is-system-running.c
1 /* SPDX-License-Identifier: LGPL-2.1-or-later */
6 #include "systemctl-util.h"
7 #include "systemctl-is-system-running.h"
11 #include "bus-locator.h"
12 #include "bus-error.h"
14 static int match_startup_finished(sd_bus_message
*m
, void *userdata
, sd_bus_error
*error
) {
15 char **state
= ASSERT_PTR(userdata
);
18 r
= bus_get_property_string(sd_bus_message_get_bus(m
), bus_systemd_mgr
, "SystemState", NULL
, state
);
20 sd_event_exit(sd_bus_get_event(sd_bus_message_get_bus(m
)), r
);
24 int verb_is_system_running(int argc
, char *argv
[], void *userdata
) {
25 _cleanup_(sd_bus_error_free
) sd_bus_error error
= SD_BUS_ERROR_NULL
;
26 _cleanup_(sd_bus_slot_unrefp
) sd_bus_slot
*slot_startup_finished
= NULL
;
27 _cleanup_(sd_event_unrefp
) sd_event
* event
= NULL
;
28 _cleanup_free_
char *state
= NULL
;
32 if (running_in_chroot() > 0 || (arg_transport
== BUS_TRANSPORT_LOCAL
&& !sd_booted())) {
38 r
= acquire_bus(BUS_MANAGER
, &bus
);
43 r
= sd_event_default(&event
);
45 r
= sd_bus_attach_event(bus
, event
, 0);
47 r
= bus_match_signal_async(
49 &slot_startup_finished
,
52 match_startup_finished
, NULL
, &state
);
54 log_warning_errno(r
, "Failed to request match for StartupFinished: %m");
59 r
= bus_get_property_string(bus
, bus_systemd_mgr
, "SystemState", &error
, &state
);
61 log_warning_errno(r
, "Failed to query system state: %s", bus_error_message(&error
, r
));
68 if (arg_wait
&& STR_IN_SET(state
, "initializing", "starting")) {
69 r
= sd_event_loop(event
);
71 log_warning_errno(r
, "Failed to get property from event loop: %m");
81 return streq(state
, "running") ? EXIT_SUCCESS
: EXIT_FAILURE
;