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:
but this seems rather brutal.package Forker; #... sub forker { die "fork failed: $!" unless defined( my $pid = fork ); return if $pid; # break a leg kill 9, $$; }
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
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |