diff --git a/src/backend/replication/logical/launcher.c b/src/backend/replication/logical/launcher.c
index 0dba25962ad88714cd288c2d8d834572b8326448..f6ae61060ec6cbbe50ef7b993cc13459b3057f43 100644
--- a/src/backend/replication/logical/launcher.c
+++ b/src/backend/replication/logical/launcher.c
@@ -72,6 +72,8 @@ typedef struct LogicalRepCtxStruct
 
 LogicalRepCtxStruct *LogicalRepCtx;
 
+static void ApplyLauncherWakeup(void);
+static void logicalrep_launcher_onexit(int code, Datum arg);
 static void logicalrep_worker_onexit(int code, Datum arg);
 static void logicalrep_worker_detach(void);
 
@@ -480,6 +482,17 @@ logicalrep_worker_detach(void)
 	LWLockRelease(LogicalRepWorkerLock);
 }
 
+/*
+ * Cleanup function for logical replication launcher.
+ *
+ * Called on logical replication launcher exit.
+ */
+static void
+logicalrep_launcher_onexit(int code, Datum arg)
+{
+	LogicalRepCtx->launcher_pid = 0;
+}
+
 /*
  * Cleanup function.
  *
@@ -643,10 +656,10 @@ ApplyLauncherWakeupAtCommit(void)
 		on_commit_launcher_wakeup = true;
 }
 
-void
+static void
 ApplyLauncherWakeup(void)
 {
-	if (IsBackendPid(LogicalRepCtx->launcher_pid))
+	if (LogicalRepCtx->launcher_pid != 0)
 		kill(LogicalRepCtx->launcher_pid, SIGUSR1);
 }
 
@@ -659,6 +672,8 @@ ApplyLauncherMain(Datum main_arg)
 	ereport(DEBUG1,
 			(errmsg("logical replication launcher started")));
 
+	before_shmem_exit(logicalrep_launcher_onexit, (Datum) 0);
+
 	/* Establish signal handlers. */
 	pqsignal(SIGHUP, logicalrep_worker_sighup);
 	pqsignal(SIGTERM, logicalrep_worker_sigterm);
diff --git a/src/include/replication/logicallauncher.h b/src/include/replication/logicallauncher.h
index 060946a096412cec92526264ba965963157b6b8d..0c2bf03a5fe9f98d0039edceafb561dfecea8122 100644
--- a/src/include/replication/logicallauncher.h
+++ b/src/include/replication/logicallauncher.h
@@ -21,7 +21,6 @@ extern void ApplyLauncherMain(Datum main_arg);
 extern Size ApplyLauncherShmemSize(void);
 extern void ApplyLauncherShmemInit(void);
 
-extern void ApplyLauncherWakeup(void);
 extern void ApplyLauncherWakeupAtCommit(void);
 extern void AtCommit_ApplyLauncher(void);