diff -Nacr a/src/backend/postmaster/pgstat.c b/src/backend/postmaster/pgstat.c *** a/src/backend/postmaster/pgstat.c 2016-09-20 05:17:08.000000000 +0900 --- b/src/backend/postmaster/pgstat.c 2016-09-28 11:43:22.000000000 +0900 *************** *** 248,253 **** --- 248,254 ---- #endif NON_EXEC_STATIC void PgstatCollectorMain(int argc, char *argv[]) pg_attribute_noreturn(); + static void pgstat_quickdie(SIGNAL_ARGS); static void pgstat_exit(SIGNAL_ARGS); static void pgstat_beshutdown_hook(int code, Datum arg); static void pgstat_sighup_handler(SIGNAL_ARGS); *************** *** 3475,3487 **** /* * Ignore all signals usually bound to some action in the postmaster, ! * except SIGHUP and SIGQUIT. Note we don't need a SIGUSR1 handler to ! * support latch operations, because we only use a local latch. */ pqsignal(SIGHUP, pgstat_sighup_handler); pqsignal(SIGINT, SIG_IGN); ! pqsignal(SIGTERM, SIG_IGN); ! pqsignal(SIGQUIT, pgstat_exit); pqsignal(SIGALRM, SIG_IGN); pqsignal(SIGPIPE, SIG_IGN); pqsignal(SIGUSR1, SIG_IGN); --- 3476,3488 ---- /* * Ignore all signals usually bound to some action in the postmaster, ! * except SIGHUP, SIGTERM and SIGQUIT. Note we don't need a SIGUSR1 ! * handler to support latch operations, because we only use a local latch. */ pqsignal(SIGHUP, pgstat_sighup_handler); pqsignal(SIGINT, SIG_IGN); ! pqsignal(SIGTERM, pgstat_exit); ! pqsignal(SIGQUIT, pgstat_quickdie); pqsignal(SIGALRM, SIG_IGN); pqsignal(SIGPIPE, SIG_IGN); pqsignal(SIGUSR1, SIG_IGN); *************** *** 3505,3511 **** pgStatDBHash = pgstat_read_statsfiles(InvalidOid, true, true); /* ! * Loop to process messages until we get SIGQUIT or detect ungraceful * death of our parent postmaster. * * For performance reasons, we don't want to do ResetLatch/WaitLatch after --- 3506,3512 ---- pgStatDBHash = pgstat_read_statsfiles(InvalidOid, true, true); /* ! * Loop to process messages until we get SIGTERM or detect ungraceful * death of our parent postmaster. * * For performance reasons, we don't want to do ResetLatch/WaitLatch after *************** *** 3524,3530 **** ResetLatch(MyLatch); /* ! * Quit if we get SIGQUIT from the postmaster. */ if (need_exit) break; --- 3525,3531 ---- ResetLatch(MyLatch); /* ! * Quit if we get SIGTERM from the postmaster. */ if (need_exit) break; *************** *** 3720,3725 **** --- 3721,3734 ---- /* SIGQUIT signal handler for collector process */ static void + pgstat_quickdie(SIGNAL_ARGS) + { + PG_SETMASK(&BlockSig); + exit(1); + } + + /* SIGTERM signal handler for collector process */ + static void pgstat_exit(SIGNAL_ARGS) { int save_errno = errno; diff -Nacr a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c *** a/src/backend/postmaster/postmaster.c 2016-09-20 05:17:08.000000000 +0900 --- b/src/backend/postmaster/postmaster.c 2016-09-28 11:43:22.000000000 +0900 *************** *** 2866,2872 **** * nothing left for it to do. */ if (PgStatPID != 0) ! signal_child(PgStatPID, SIGQUIT); } else { --- 2866,2872 ---- * nothing left for it to do. */ if (PgStatPID != 0) ! signal_child(PgStatPID, SIGTERM); } else {