chiark / gitweb /
main: only reopen /dev/console if we switch-root to a custom init
[elogind.git] / src / core / main.c
index 6f6b565d68d9d5424bfaa3ccea2f9986347de8a6..ae3769be5279ed08b2f79794e9cc0dc4072afcea 100644 (file)
@@ -51,6 +51,7 @@
 #include "path-util.h"
 #include "switch-root.h"
 #include "capability.h"
+#include "killall.h"
 
 #include "mount-setup.h"
 #include "loopback-setup.h"
@@ -1672,10 +1673,12 @@ finish:
                  * rebooted while we do that */
                 watchdog_close(true);
 
-                /* Reopen the console */
-                make_console_stdio();
-
                 if (switch_root_dir) {
+                        /* Kill all remaining processes from the initrd */
+                        broadcast_signal(SIGTERM);
+                        broadcast_signal(SIGKILL);
+
+                        /* And switch root */
                         r = switch_root(switch_root_dir);
                         if (r < 0)
                                 log_error("Failed to switch root, ignoring: %s", strerror(-r));
@@ -1727,6 +1730,9 @@ finish:
                         fds = NULL;
                 }
 
+                /* Reopen the console */
+                make_console_stdio();
+
                 for (j = 1, i = 1; j < argc; j++)
                         args[i++] = argv[j];
                 args[i++] = NULL;