hotshot has asked for the wisdom of the Perl Monks concerning the following question:
the above code is wrraped into a function and called with two parameters: script and timeout.eval { alarm($timeout); pipe(READ,WRITE); if ($pid = fork) { $SIG{CHLD} = sub { $exitStatus = $? while (waitpid(-1, WNOHANG +)) > 0 }; close(WRITE); } else { die "Cannot fork: $!" unless defined $pid; open(STDOUT, ">&=WRITE") or die "Cannot redirect STDOUT: $!"; close(READ); exec ("$extScript") or die "Cannot exec $extScript: $!"; } while(<READ>) { push(@output, $_); } close(READ); alarm(0); }; ## End eval if ($@) { if ($@ =~ /Timeout/) { print "Reached timeout\n"; } else { alarm(0); die; } } else { print Dumper(\@output); }
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: WNOHANG uninitialized?
by Fletch (Bishop) on Feb 02, 2004 at 14:47 UTC |