Beefy Boxes and Bandwidth Generously Provided by pair Networks
go ahead... be a heretic

comment on

( [id://3333] : superdoc . print w/replies, xml ) Need Help??
I'm having some difficulty with a program that establishes a database handle and then forks. When the child process exits, the database handle disconnects. Here's a conceptual example:
#!/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";
Output looks like this:
Ping: 1
Hello world from 7022!
Spawned child process: 7022

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.


In reply to DBI + fork ... child process kills handle by DrManhattan

Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post; it's "PerlMonks-approved HTML":

  • Are you posting in the right place? Check out Where do I post X? to know for sure.
  • Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
    <code> <a> <b> <big> <blockquote> <br /> <dd> <dl> <dt> <em> <font> <h1> <h2> <h3> <h4> <h5> <h6> <hr /> <i> <li> <nbsp> <ol> <p> <small> <strike> <strong> <sub> <sup> <table> <td> <th> <tr> <tt> <u> <ul>
  • Snippets of code should be wrapped in <code> tags not <pre> tags. In fact, <pre> tags should generally be avoided. If they must be used, extreme care should be taken to ensure that their contents do not have long lines (<70 chars), in order to prevent horizontal scrolling (and possible janitor intervention).
  • Want more info? How to link or How to display code and escape characters are good places to start.