68 lines
986 B
Perl
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>
|
|
|