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.
This commit is contained in:
Daan De Meyer 2023-04-11 13:17:13 +02:00
parent 623a00020f
commit 3a89cb84a6
2 changed files with 10 additions and 0 deletions

View file

@ -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);

View file

@ -14,6 +14,8 @@
#include <sys/stat.h>
#include <unistd.h>
#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.");