diff --git a/src/backend/postmaster/autovacuum.c b/src/backend/postmaster/autovacuum.c
index c1dd8168ca..d6b8738d28 100644
--- a/src/backend/postmaster/autovacuum.c
+++ b/src/backend/postmaster/autovacuum.c
@@ -140,7 +140,6 @@ static bool am_autovacuum_worker = false;
 /* Flags set by signal handlers */
 static volatile sig_atomic_t got_SIGHUP = false;
 static volatile sig_atomic_t got_SIGUSR2 = false;
-static volatile sig_atomic_t got_SIGTERM = false;
 
 /* Comparison points for determining whether freeze_max_age is exceeded */
 static TransactionId recentXid;
@@ -344,7 +343,6 @@ static void autovac_report_workitem(AutoVacuumWorkItem *workitem,
 									const char *nspname, const char *relname);
 static void av_sighup_handler(SIGNAL_ARGS);
 static void avl_sigusr2_handler(SIGNAL_ARGS);
-static void avl_sigterm_handler(SIGNAL_ARGS);
 static void autovac_refresh_stats(void);
 
 
@@ -452,7 +450,7 @@ AutoVacLauncherMain(int argc, char *argv[])
 	 */
 	pqsignal(SIGHUP, av_sighup_handler);
 	pqsignal(SIGINT, StatementCancelHandler);
-	pqsignal(SIGTERM, avl_sigterm_handler);
+	pqsignal(SIGTERM, die);
 
 	pqsignal(SIGQUIT, quickdie);
 	InitializeTimeouts();		/* establishes SIGALRM handler */
@@ -552,9 +550,8 @@ AutoVacLauncherMain(int argc, char *argv[])
 		/* Now we can allow interrupts again */
 		RESUME_INTERRUPTS();
 
-		/* if in shutdown mode, no need for anything further; just go away */
-		if (got_SIGTERM)
-			goto shutdown;
+		/* And check for them, too */
+		CHECK_FOR_INTERRUPTS();
 
 		/*
 		 * Sleep at least 1 second after any error.  We don't want to be
@@ -605,8 +602,8 @@ AutoVacLauncherMain(int argc, char *argv[])
 	 */
 	if (!AutoVacuumingActive())
 	{
-		if (!got_SIGTERM)
-			do_start_worker();
+		CHECK_FOR_INTERRUPTS();
+		do_start_worker();
 		proc_exit(0);			/* done */
 	}
 
@@ -622,12 +619,14 @@ AutoVacLauncherMain(int argc, char *argv[])
 	rebuild_database_list(InvalidOid);
 
 	/* loop until shutdown request */
-	while (!got_SIGTERM)
+	while (1)
 	{
 		struct timeval nap;
 		TimestampTz current_time = 0;
 		bool		can_launch;
 
+		CHECK_FOR_INTERRUPTS();
+
 		/*
 		 * This loop is a bit different from the normal use of WaitLatch,
 		 * because we'd like to sleep before the first launch of a child
@@ -652,10 +651,6 @@ AutoVacLauncherMain(int argc, char *argv[])
 		/* Process sinval catchup interrupts that happened while sleeping */
 		ProcessCatchupInterrupt();
 
-		/* the normal shutdown case */
-		if (got_SIGTERM)
-			break;
-
 		if (got_SIGHUP)
 		{
 			got_SIGHUP = false;
@@ -814,7 +809,6 @@ AutoVacLauncherMain(int argc, char *argv[])
 	}
 
 	/* Normal exit from the autovac launcher is here */
-shutdown:
 	ereport(DEBUG1,
 			(errmsg("autovacuum launcher shutting down")));
 	AutoVacuumShmem->av_launcherpid = 0;
@@ -1411,18 +1405,6 @@ avl_sigusr2_handler(SIGNAL_ARGS)
 	errno = save_errno;
 }
 
-/* SIGTERM: time to die */
-static void
-avl_sigterm_handler(SIGNAL_ARGS)
-{
-	int			save_errno = errno;
-
-	got_SIGTERM = true;
-	SetLatch(MyLatch);
-
-	errno = save_errno;
-}
-
 
 /********************************************************************
  *					  AUTOVACUUM WORKER CODE
