Re: fork() and dynamically loaded c functions....

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Jay Flattery <jaycode(at)rocketmail(dot)com>
Cc: pgsql-general(at)postgresql(dot)org
Subject: Re: fork() and dynamically loaded c functions....
Date: 2010-08-10 23:49:18
Message-ID: 21552.1281484158@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Jay Flattery <jaycode(at)rocketmail(dot)com> writes:
>> What exactly is that child process doing? It sure sounds like it thinks
>> it's a valid backend.

> Actually it's not doing anything, as I'm just trying to work it all out - just a

> bunch of printfs and waits.
> But the library is a PG_MAGIC_MODULE.

> I tried killing it with pg_terminate_backend(pid) - but I get WARNING: PID
> 1166738497 is not a PostgreSQL server process. (Interestingly the child
> pid=28629, which was printed in the line before)

The forked process still thinks it's a backend, so when you try to kill
it it's going to try to disconnect from shared memory. This is bad,
since the parent still thinks the same thing, but the child will have
zapped the parent's entries in shared memory.

Offhand the only clean way I can see to launch a child process is to
fork *and exec something*. There is way too much state lying around
in a backend process that could rise up to bite you if you don't.
You might find that doing on_exit_reset() in the child would fix the
worst problems, but it still sounds chancy as heck.

regards, tom lane

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Greg Smith 2010-08-11 02:01:52 Re: MySQL versus Postgres
Previous Message Jay Flattery 2010-08-10 23:29:08 Re: fork() and dynamically loaded c functions....