if (pmState == PM_RECOVERY)
            {
                /*
-                * Only startup, bgwriter, and checkpointer should be active
-                * in this state; we just signaled the first two, and we don't
-                * want to kill checkpointer yet.
+                * Only startup, bgwriter, walreceiver, and/or checkpointer
+                * should be active in this state; we just signaled the first
+                * three, and we don't want to kill checkpointer yet.
                 */
                pmState = PM_WAIT_BACKENDS;
            }
        {
            StartupPID = 0;
 
+           /*
+            * Startup process exited in response to a shutdown request (or it
+            * completed normally regardless of the shutdown request).
+            */
+           if (Shutdown > NoShutdown &&
+               (EXIT_STATUS_0(exitstatus) || EXIT_STATUS_1(exitstatus)))
+           {
+               pmState = PM_WAIT_BACKENDS;
+               /* PostmasterStateMachine logic does the rest */
+               continue;
+           }
+
            /*
             * Unexpected exit of startup process (including FATAL exit)
             * during PM_STARTUP is treated as catastrophic. There are no
                ExitPostmaster(1);
            }
 
-           /*
-            * Startup process exited in response to a shutdown request (or it
-            * completed normally regardless of the shutdown request).
-            */
-           if (Shutdown > NoShutdown &&
-               (EXIT_STATUS_0(exitstatus) || EXIT_STATUS_1(exitstatus)))
-           {
-               pmState = PM_WAIT_BACKENDS;
-               /* PostmasterStateMachine logic does the rest */
-               continue;
-           }
-
            /*
             * After PM_STARTUP, any unexpected exit (including FATAL exit) of
             * the startup process is catastrophic, so kill other children,
     * first. We don't want to go back to recovery in that case.
     */
    if (CheckPostmasterSignal(PMSIGNAL_RECOVERY_STARTED) &&
-       pmState == PM_STARTUP)
+       pmState == PM_STARTUP && Shutdown == NoShutdown)
    {
        /* WAL redo has started. We're out of reinitialization. */
        FatalError = false;
        pmState = PM_RECOVERY;
    }
    if (CheckPostmasterSignal(PMSIGNAL_BEGIN_HOT_STANDBY) &&
-       pmState == PM_RECOVERY)
+       pmState == PM_RECOVERY && Shutdown == NoShutdown)
    {
        /*
         * Likewise, start other special children as needed.
        signal_child(SysLoggerPID, SIGUSR1);
    }
 
-   if (CheckPostmasterSignal(PMSIGNAL_START_AUTOVAC_LAUNCHER))
+   if (CheckPostmasterSignal(PMSIGNAL_START_AUTOVAC_LAUNCHER) &&
+       Shutdown == NoShutdown)
    {
        /*
         * Start one iteration of the autovacuum daemon, even if autovacuuming
        start_autovac_launcher = true;
    }
 
-   if (CheckPostmasterSignal(PMSIGNAL_START_AUTOVAC_WORKER))
+   if (CheckPostmasterSignal(PMSIGNAL_START_AUTOVAC_WORKER) &&
+       Shutdown == NoShutdown)
    {
        /* The autovacuum launcher wants us to start a worker process. */
        StartAutovacuumWorker();
    if (CheckPostmasterSignal(PMSIGNAL_START_WALRECEIVER) &&
        WalReceiverPID == 0 &&
        (pmState == PM_STARTUP || pmState == PM_RECOVERY ||
-        pmState == PM_HOT_STANDBY || pmState == PM_WAIT_READONLY))
+        pmState == PM_HOT_STANDBY || pmState == PM_WAIT_READONLY) &&
+       Shutdown == NoShutdown)
    {
        /* Startup Process wants us to start the walreceiver process. */
        WalReceiverPID = StartWalReceiver();