diff --git a/src/backend/replication/walreceiver.c b/src/backend/replication/walreceiver.c
index 60de3be92c..396510a81d 100644
--- a/src/backend/replication/walreceiver.c
+++ b/src/backend/replication/walreceiver.c
@@ -963,6 +963,29 @@ XLogWalRcvWrite(char *buf, Size nbytes, XLogRecPtr recptr)
 		buf += byteswritten;
 
 		LogstreamResult.Write = recptr;
+
+		{
+			/* fake oneshot SIGTERM just at segment end */
+			struct stat b;
+			char *sigfile1 = "/tmp/hoge1";
+			char *sigfile2 = "/tmp/hoge2";
+
+			if (LogstreamResult.Write % wal_segment_size == 0 &&
+				stat(sigfile1, &b) == 0)
+			{
+				unlink(sigfile1);
+				ShutdownRequestPending = true;
+				ereport(LOG,(errmsg("STOP BY trig1@%lX", LogstreamResult.Write)));
+			}
+
+			if (LogstreamResult.Write % wal_segment_size == 0x500000 &&
+				stat(sigfile2, &b) == 0)
+			{
+				unlink(sigfile2);
+				ShutdownRequestPending = true;
+				ereport(LOG,(errmsg("STOP BY trig2@%lX", LogstreamResult.Write)));
+			}
+		}
 	}
 
 	/* Update shared-memory status */
