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. >>