Re: Win32 question: getppid() with no parent?

Поиск
Список
Период
Сортировка
От Magnus Hagander
Тема Re: Win32 question: getppid() with no parent?
Дата
Msg-id 6BCB9D8A16AC4241919521715F4D8BCE1716A4@algol.sollentuna.se
обсуждение исходный текст
Ответ на Win32 question: getppid() with no parent?  (Tom Lane <tgl@sss.pgh.pa.us>)
Ответы Re: Win32 question: getppid() with no parent?  (Tom Lane <tgl@sss.pgh.pa.us>)
Re: Win32 question: getppid() with no parent?  (Bruce Momjian <pgman@candle.pha.pa.us>)
Список pgsql-hackers-win32
>On Unix, it is possible to tell whether your parent process has died
>by checking to see if you have become a child of init:
>
>    if (getppid() == 1)
>       /* oh dear, I am an orphan */
>
>Is there equivalent functionality available on Windows?
>
>Currently, we have the pgstat child process checking for postmaster
>death by watching for read-ready on a pipe.  This does not scale
>pleasantly to multiple long-lived postmaster children, though, so
>I'm wondering about ways for the children to detect a postmaster crash
>without requiring any direct postmaster cooperation.

Not really.
http://www.codeguru.com/Cpp/W-P/win32/article.php/c1437/
Can be done, but that's really ugly.

Question though - we keep a PostmasterPid variable, right? One way to do
it is if we n child startup do OpenProcess() on this pid, to return a
HANDLE (the pid may be reused, but an open handle certainly can't). We
can then do a simple:
if (WaitForSingleObject(PostmasterHandle, 0) == WAIT_OBJECT_0)
   /* oh dear, postmaster is gone */

This exepects that we know whom our parent is at process start, which
gettpid doesn't. But it might be enough?


(If we can't rely on that variable, we could do a win32 specific hack
that passes the HANDLE of the postmaster down to the child on exec, I
guess.)

//Magnus

В списке pgsql-hackers-win32 по дате отправления:

Предыдущее
От: Tom Lane
Дата:
Сообщение: Win32 question: getppid() with no parent?
Следующее
От: Tom Lane
Дата:
Сообщение: Re: Win32 question: getppid() with no parent?