Imported Upstream version 96.042201
This commit is contained in:
67
lib/Proc/Forkfunc.pm
Normal file
67
lib/Proc/Forkfunc.pm
Normal file
@@ -0,0 +1,67 @@
|
||||
|
||||
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>
|
||||
|
||||
Reference in New Issue
Block a user