Imported Upstream version 96.042201
This commit is contained in:
commit
5c96296802
5
MANIFEST
Normal file
5
MANIFEST
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
MANIFEST
|
||||||
|
Makefile.PL
|
||||||
|
README
|
||||||
|
lib/Proc/Forkfunc.pm
|
||||||
|
t/fork.t
|
9
Makefile.PL
Normal file
9
Makefile.PL
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
|
||||||
|
use ExtUtils::MakeMaker;
|
||||||
|
|
||||||
|
WriteMakefile(
|
||||||
|
'VERSION' => 96.042201,
|
||||||
|
'NAME' => 'Proc::Forkfunc',
|
||||||
|
'dist' => { COMPRESS=>"gzip", SUFFIX=>"gz" },
|
||||||
|
);
|
||||||
|
|
11
README
Normal file
11
README
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
|
||||||
|
This is a simple wrapper for fork. It will wait for there
|
||||||
|
to be a process available. It will fork off a perl function.
|
||||||
|
|
||||||
|
To build/install it, use
|
||||||
|
|
||||||
|
perl Makefile.PL
|
||||||
|
make
|
||||||
|
make test
|
||||||
|
make install
|
||||||
|
|
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>
|
||||||
|
|
43
t/fork.t
Executable file
43
t/fork.t
Executable file
@ -0,0 +1,43 @@
|
|||||||
|
#!/usr/local/bin/perl -w
|
||||||
|
|
||||||
|
$| = 1;
|
||||||
|
|
||||||
|
print "1..4\n";
|
||||||
|
|
||||||
|
use Proc::Forkfunc;
|
||||||
|
|
||||||
|
forkfunc(sub { exit 1} );
|
||||||
|
|
||||||
|
&wok(1);
|
||||||
|
|
||||||
|
forkfunc(sub { exit $_[0] }, 2);
|
||||||
|
|
||||||
|
&wok(2);
|
||||||
|
|
||||||
|
forkfunc(\&pok3);
|
||||||
|
|
||||||
|
&wok(3);
|
||||||
|
|
||||||
|
forkfunc(\&pok, 4);
|
||||||
|
|
||||||
|
&wok(4);
|
||||||
|
|
||||||
|
sub pok3
|
||||||
|
{
|
||||||
|
exit 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub pok
|
||||||
|
{
|
||||||
|
exit $_[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
sub wok
|
||||||
|
{
|
||||||
|
my ($ws) = @_;
|
||||||
|
|
||||||
|
wait();
|
||||||
|
my $st = $? >> 8;
|
||||||
|
|
||||||
|
print($st == $ws ? "ok $ws\n" : "not ok $ws\n");
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user