On Fri, Apr 11, 2014 at 7:44 AM, Bruce Momjian <br...@momjian.us> wrote: > > Can someone with Windows expertise comment on whether this should be > applied?
I tested the same in windows and it is working as specified. The same background running server can be closed with ctrl+break command. > --------------------------------------------------------------------------- > > On Tue, Jan 7, 2014 at 12:44:33PM +0100, Christian Ullrich wrote: >> Hello all, >> >> when pg_ctl start is used to run PostgreSQL in a console window on >> Windows, it runs in the background (it is terminated by closing the >> window, but that is probably inevitable). There is one problem, >> however: The first Ctrl-C in that window, no matter in which >> situation, will cause the background postmaster to exit. If you, >> say, ping something, and press Ctrl-C to stop ping, you probably >> don't want the database to go away, too. >> >> The reason is that Windows delivers the Ctrl-C event to all >> processes using that console, not just to the foreground one. >> >> Here's a patch to fix that. "pg_ctl stop" still works, and it has no >> effect when running as a service, so it should be safe. It starts >> the postmaster in a new process group (similar to calling setpgrp() >> after fork()) that does not receive Ctrl-C events from the console >> window. >> >> -- >> Christian > >> diff --git a/src/bin/pg_ctl/pg_ctl.c b/src/bin/pg_ctl/pg_ctl.c >> new file mode 100644 >> index 50d4586..89a9544 >> *** a/src/bin/pg_ctl/pg_ctl.c >> --- b/src/bin/pg_ctl/pg_ctl.c >> *************** CreateRestrictedProcess(char *cmd, PROCE >> *** 1561,1566 **** >> --- 1561,1567 ---- >> HANDLE restrictedToken; >> SID_IDENTIFIER_AUTHORITY NtAuthority = {SECURITY_NT_AUTHORITY}; >> SID_AND_ATTRIBUTES dropSids[2]; >> + DWORD flags; >> >> /* Functions loaded dynamically */ >> __CreateRestrictedToken _CreateRestrictedToken = NULL; >> *************** CreateRestrictedProcess(char *cmd, PROCE >> *** 1636,1642 **** >> AddUserToTokenDacl(restrictedToken); >> #endif >> >> ! r = CreateProcessAsUser(restrictedToken, NULL, cmd, NULL, NULL, TRUE, >> CREATE_SUSPENDED, NULL, NULL, &si, processInfo); >> >> Kernel32Handle = LoadLibrary("KERNEL32.DLL"); >> if (Kernel32Handle != NULL) >> --- 1637,1650 ---- >> AddUserToTokenDacl(restrictedToken); >> #endif >> >> ! flags = CREATE_SUSPENDED; >> ! >> ! /* Protect console process from Ctrl-C */ >> ! if (!as_service) { >> ! flags |= CREATE_NEW_PROCESS_GROUP; >> ! } >> ! >> ! r = CreateProcessAsUser(restrictedToken, NULL, cmd, NULL, NULL, TRUE, >> flags, NULL, NULL, &si, processInfo); >> >> Kernel32Handle = LoadLibrary("KERNEL32.DLL"); >> if (Kernel32Handle != NULL) Regards, Hari Babu Fujitsu Australia -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers