In one of my modules I have a sub that performs a fork. It works fine for the most part, but when I also use the standard module File::Temp I get some weird behavior. This is because File::Temp has END blocks that get triggered prematurely when the child exits. Therefore, my module most likely won't play well with any other module that uses END blocks.

I have not been able to come up with a satisfactory solution to this problem. The best I can think of is something like:

package Forker; #... sub forker { die "fork failed: $!" unless defined( my $pid = fork ); return if $pid; # break a leg kill 9, $$; }
but this seems rather brutal.

Afterthought: More generally, it is clear that fork and END don't mix too well, so I wonder what "best practices" could inform this issue. I.e., should one refrain from using END blocks (or alternatively fork) in a module? Or should every module that uses an END block also have a BEGIN block in which the initial value of $$ gets stored, so that END blocks can determine whether they were called from the parent or not?

I'd very much like to read your opinions on this. Thanks in advance!

the lowliest monk


In reply to fork & END by tlm

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



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.