Re: PostgreSQL in Windows console and Ctrl-C - Mailing list pgsql-hackers
From | Bruce Momjian |
---|---|
Subject | Re: PostgreSQL in Windows console and Ctrl-C |
Date | |
Msg-id | 20140410214426.GI6917@momjian.us Whole thread Raw |
In response to | PostgreSQL in Windows console and Ctrl-C (Christian Ullrich <chris@chrullrich.net>) |
Responses |
Re: PostgreSQL in Windows console and Ctrl-C
Re: PostgreSQL in Windows console and Ctrl-C |
List | pgsql-hackers |
Can someone with Windows expertise comment on whether this should be applied? --------------------------------------------------------------------------- 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) > > -- > Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) > To make changes to your subscription: > http://www.postgresql.org/mailpref/pgsql-hackers -- Bruce Momjian <bruce@momjian.us> http://momjian.us EnterpriseDB http://enterprisedb.com + Everyone has their own god. +
pgsql-hackers by date: