Thanks Jeroen,

Somewhere in my quest to solve this issue, I read to first
unset the child signal with

$SIG{CHLD} = 'IGNORE'; ## Children die unnoticed ...

and then in the child use

setsid or die $!;

which supposedly immediately dissociates the child from the 
mother, which means the mother does not have to waitpid ...

but, if i sleep a bit in both the mother and the child, and monitor this
with watch, it's clear that the child does not immediately become a child
of PID 1 (ie, it has dissociated/daemonised) on setsid -- that only 
happens when the mother has died ...

With regards $dbh->{InactiveDestory}, I have tried it, but all
without any success.

In my specific case, the mother does not need to talk to the child -- the 
child must just fork, do it's thing and die.

Conceptually, the following works well enough if placed in the mother:

my $ppid = open (WRITEME, "| ./child-external-script.pl") or warn "Couldn't fork: 
$!\n";
print WRITEME "MOTHER $$ CHILD $ppid";
close WRITEME;

But i'd prefer to have the child's code in a module, and the mother then
just calling a function, ie

...
$FORKING = 1;
fork_to_child($$,"MESSAGE") if $FORKING;
...

Children, children, children ...
What can I say?


Tielman




On Tue, 07 Oct 2003 08:53:33 -0500, Jeroen Lodewijks wrote:

> Hi Tielman,
> 
> I had exactly the same problem (I asked about it about 2 weeks ago). I use
> Oracle though. Even if you don't use the handle from the mother in the
> child, the handle still gets fucked up. The child will try to close your
> handle.
> 
> There is a modifier called InactiveDestroy, like:
>    $db->{InactiveDestroy} = 1;
> 
> This supposedly will ensure that your handle isn't closed when the child
> exist. It sure doesn't close the connection but it doesn't work for me.
> The parent handle is just KAPUT. But this is Oracle, not Informix. It
> might work for you.
> 
> I have given up to it. I now close and open all database handles again and
> again and again.
> 
> PS I don't know how your forking is implemented but I sure hope that you
> don't need to know any exit values from your children. I have noticed it's
> *very* unreliable to depend on waitpid. Again, your milage may vary as
> this Oracle. I know use pipes to communicate between processes.
> 
> Jeroen
> 
> 
>> Thanks John,
>> 
>> But the idea here is that the child doesn't need a handle at all -- I
>> just want the mother's handle to be "left alone" ...
>> 
>> Tielman
>> 
>> 
>> On Tue, 07 Oct 2003 09:09:58 -0400, John Saylor wrote:
>> 
>> > hi
>> > 
>> > no- fork YOU and die ...
>> > 
>> > ( 03.10.07 12:31 +0100 ) tvilliers:
>> >> I have a mother process which needs to fork off a child at every x
>> >> milestone.
>> >> Now, the mother has an open database handle, which from my
>> understanding
>> >> gets transferred to the child at fork. I want the handle
>> to stay with the
>> >> mother.
>> > 
>> > why not have the child just create it's own handle? i'm no
>> dba [but i
>> > play one on the internet], but i've seen informix
>> connection lists that
>> > use PID for identifying the handles.
>>





Reply via email to