Output looks like this:#!/usr/bin/perl use strict; use MyDBH; my $dbh = MyDBH->new(); print "Ping: ", $dbh->ping(), "\n"; my $kidpid = fork(); if ($kidpid == 0) { # child process print "Hello world from $$!\n"; exit; } # parent process print "Spawned child process: $kidpid\n"; print "Ping: ", $dbh->ping(), "\n";
Ping: 1 Hello world from 7022! Spawned child process: 7022 Ping:
I think what's happening here is that the database handle's destructor is being called when the child process exits. If I replace the exit() call in the child with an exec() of something, the child process is replaced in memory and the destructor is never called. That seems kind of kludgey to me though, and I'm wondering if there's some other way around this. Is there any other way I can remove the object from the child's space or prevent the destructor from being called? I realize I can disconnect the handle prior to forking and the reestablish it, but I'm hoping there's a cleaner solution.
-Matt
In reply to DBI + fork ... child process kills handle by DrManhattan
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |