signals on windows
От | Andrew Dunstan |
---|---|
Тема | signals on windows |
Дата | |
Msg-id | 3F8191E2.7060801@dunslane.net обсуждение исходный текст |
Ответы |
Re: signals on windows
|
Список | pgsql-hackers-win32 |
here's what I was going to put into initdb.c for signal handling - comments welcome - as I think about it more I'm strongly leaning to the "set a flag" solution - we'd check for the flag before outputting "ok" in various places. cheers andrew /* * signal handler in case we are interrupted. * * The Windows runtime docs at * http://msdn.microsoft.com/library/en-us/vclib/html/_crt_signal.asp * specifically forbid a number of things being done from a signal handler, * most of which we do :-) (specifically, we do IO, mem allocation and system * calls). Also note the behaviour of Windows with SIGINT, which says this: * Note SIGINT is not supported for any Win32 application, including * Windows 98/Me and Windows NT/2000/XP. When a CTRL+C interrupt occurs, * Win32 operating systems generate a new thread to specifically handle * that interrupt. This can cause a single-thread application such as UNIX, * to become multithreaded, resulting in unexpected behavior. * I have no idea how to handle this. (Strange they call UNIX an application!) * So this will need some testing on Windows. * One alternative might be to set a flag that we periodically check for. * */ static void trapsig(int signum) { fputs("Caught Signal.\n",stderr); exit_nicely(); } [snip] #ifdef SIGHUP pqsignal(SIGHUP,trapsig); #endif #ifdef SIGINT pgsignal(SIGINT,trapsig); #endif #ifdef SIGQUIT pgsignal(SIGQUIT,trapsig); #endif #ifdef SIGTERM pgsignal(SIGTERM,trapsig); #endif
В списке pgsql-hackers-win32 по дате отправления: