libproc-forkfunc-perl/lib/Proc/Forkfunc.pm

68 lines
986 B
Perl

package Proc::Forkfunc;
require Exporter;
require POSIX;
use Carp;
@ISA = (Exporter);
@EXPORT = qw(forkfunc);
use vars qw($VERSION);
$VERSION = 96.041701;
use strict;
sub forkfunc
{
my ($func, @args) = @_;
my $pid;
{
if ($pid = fork()) {
# parent
return $pid;
} elsif (defined $pid) {
# child
&$func(@args);
croak "call to child returned\n";
} elsif ($! == &POSIX::EAGAIN) {
my $o0 = $0;
$0 = "$o0: waiting to fork";
sleep 5;
$0 = $o0;
redo;
} else {
croak "Can't fork: $!";
}
}
}
1;
__END__
=head1 NAME
Proc::Forkfunk -- fork off a function
=head1 SYNOPSIS
use Proc::Forkfunc;
forkfunc(\&child_func,@child_args);
=head1 DESCRIPTION
Fork off a process. Call a function on the child process
the function should be passed in as a reference.
The child function should not return.
Logic copied from somewhere, probably Larry Wall.
=head1 AUTHOR
David Muir Sharnoff <muir@idiom.com>