Re: PostgreSQL in Windows console and Ctrl-C - Mailing list pgsql-hackers
From | Haribabu Kommi |
---|---|
Subject | Re: PostgreSQL in Windows console and Ctrl-C |
Date | |
Msg-id | CAJrrPGduxVBhWqb2h8BmZiwXwVM4J5KPPQR5RE2gxD+gT4z_Zw@mail.gmail.com Whole thread Raw |
In response to | Re: PostgreSQL in Windows console and Ctrl-C (Bruce Momjian <bruce@momjian.us>) |
Responses |
Re: PostgreSQL in Windows console and Ctrl-C
|
List | pgsql-hackers |
On Fri, Apr 11, 2014 at 7:44 AM, Bruce Momjian <bruce@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
pgsql-hackers by date: