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:

Previous
From: Florian Pflug
Date:
Subject: Re: [PATCH] Negative Transition Aggregate Functions (WIP)
Next
From: Tom Lane
Date:
Subject: Re: [PATCH] Negative Transition Aggregate Functions (WIP)