Well Tielman, 

I think you are lucky that you don't have to catch the status of your
children! 

Just one comment about: $SIG{CHLD} = 'IGNORE'; ## Children die unnoticed ...

I don't know exactly what your child does but if your child starts another
process again, you might run in trouble.

I coded a program which fired up Sendmail in the child (through Mime::Lite).
I had set $SIG{CHLD} = 'IGNORE'.

It took me 3 days to find out that Sendmail didn't return proper return
values anymore.
This was all due to the fact that MIME::Lite starts up a child process
itself and because of the IGNORE, it always returned the same return
value...

I know this is an aside but it might save you some headaches...

Jeroen

> 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