Re: PostgreSQL in Windows console and Ctrl-C

From: Bruce Momjian <bruce(at)momjian(dot)us>
To: Christian Ullrich <chris(at)chrullrich(dot)net>
Cc: pgsql-hackers(at)postgresql(dot)org
Subject: Re: PostgreSQL in Windows console and Ctrl-C
Date: 2014-04-10 21:44:26
Message-ID: 20140410214426.GI6917@momjian.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: 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(at)postgresql(dot)org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-hackers

--
Bruce Momjian <bruce(at)momjian(dot)us> http://momjian.us
EnterpriseDB http://enterprisedb.com

+ Everyone has their own god. +

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Tom Lane 2014-04-10 21:52:26 Re: [PATCH] Negative Transition Aggregate Functions (WIP)
Previous Message Florian Pflug 2014-04-10 21:33:58 Re: [PATCH] Negative Transition Aggregate Functions (WIP)