diff -rpcd a/src/test/regress/pg_regress.c b/src/test/regress/pg_regress.c *** a/src/test/regress/pg_regress.c Mon Dec 2 09:17:04 2013 --- b/src/test/regress/pg_regress.c Wed Dec 25 16:29:24 2013 *************** stop_postmaster(void) *** 284,301 **** --- 284,311 ---- { if (postmaster_running) { + #if defined(WIN32) || defined(__CYGWIN__) /* We use pg_ctl to issue the kill and wait for stop */ char buf[MAXPGPATH * 2]; + #endif int r; /* On Windows, system() seems not to force fflush, so... */ fflush(stdout); fflush(stderr); + #if defined(WIN32) || defined(__CYGWIN__) snprintf(buf, sizeof(buf), SYSTEMQUOTE "\"%s/pg_ctl\" stop -D \"%s/data\" -s -m fast" SYSTEMQUOTE, bindir, temp_install); r = system(buf); + #else + /* On UNIX/Linux, pg_ctl times out waiting for a defunct postgres. */ + if (kill(postmaster_pid, SIGINT) != 0) + fprintf(stderr, _("\n%s: could not kill postmaster: %s\n"), + progname, strerror(errno)); + (void) waitpid((pid_t) postmaster_pid, &r, 0); + #endif if (r != 0) { fprintf(stderr, _("\n%s: could not stop postmaster: exit code was %d\n"),