From: Daan De Meyer Date: Tue, 11 Apr 2023 11:17:13 +0000 (+0200) Subject: core: Propagate exit status via notify socket when running in VM X-Git-Tag: v254-rc1~742^2~1 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=3a89cb84a62314c3c4807016dbff4359d6988d79;p=thirdparty%2Fsystemd.git core: Propagate exit status via notify socket when running in VM When running in a container, we can propagate the exit status of pid1 as usual via the process exit status. This is not possible when running in a VM. Instead, let's send EXIT_STATUS=%i via the notify socket if one is configured. The user running the VM can then pick up the exit status from the notify socket after the VM has shut down. --- diff --git a/src/core/main.c b/src/core/main.c index 9588c625b28..e49f6ab0940 100644 --- a/src/core/main.c +++ b/src/core/main.c @@ -3105,6 +3105,10 @@ finish: error_message = "Failed to execute shutdown binary"; } + /* This is primarily useful when running systemd in a VM, as it provides the user running the VM with + * a mechanism to pick up systemd's exit status in the VM. */ + (void) sd_notifyf(0, "EXIT_STATUS=%i", retval); + watchdog_free_device(); arg_watchdog_device = mfree(arg_watchdog_device); diff --git a/src/shutdown/shutdown.c b/src/shutdown/shutdown.c index a8248901ce6..b1dac20c692 100644 --- a/src/shutdown/shutdown.c +++ b/src/shutdown/shutdown.c @@ -14,6 +14,8 @@ #include #include +#include "sd-daemon.h" + #include "alloc-util.h" #include "async.h" #include "binfmt-util.h" @@ -570,6 +572,10 @@ int main(int argc, char *argv[]) { if (!in_container) sync_with_progress(); + /* This is primarily useful when running systemd in a VM, as it provides the user running the VM with + * a mechanism to pick up systemd's exit status in the VM. */ + (void) sd_notifyf(0, "EXIT_STATUS=%i", arg_exit_code); + if (streq(arg_verb, "exit")) { if (in_container) { log_info("Exiting container.");