I thought I would thrown this out to the world incase anyone needs this in
the future.  Might help those of us who "Google" though new
challenges... :-)<br/>
<br/>
Months ago I wrote a script that ran an external program and parsed the
output for errors.&nbsp; Unfortunatly, one of the errors that I did not
anticipate was the external program hanging forever.&nbsp; The usual<br/>
&nbsp;&nbsp;&nbsp;&nbsp; $result = `/path/to/cmd`;<br/>
hung and never returned -- thus the script never completed.<br/>
<br/>
I ended up writing this subroutine to call the command with a timeout
window defined.<br/>
example:<br/>
&nbsp;&nbsp;&nbsp;&nbsp; ($TimeoutStatus, $CmdResult) =
timedexec(90,&quot;/path/to/cmd&quot;);<br/>
This will call the program &quot;command&quot; and wait 90 seconds for it
to complete.&nbsp; The returned value in $TimeoutStatus will be 0(success)
or 1(failure).&nbsp; The value in $CmdResult will be the text output
returned by the command (to stdout).<br/>
<br/>
Dan<br/>
<br/>
sub timedexec {<br/>
# timedexec : This subroutine will run a command within a specified time<br/>
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
window (in seconds).<br/>
# RETURNS : Returns an array of two elements:<br/>
#&nbsp; Success : first element is 0<br/>
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; second
element is the text returned by the command.<br/>
#&nbsp; Failure : first element is 1<br/>
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; second
element is empty.<br/>
#<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; my $alarm=shift;<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; my $CMD=shift;<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; my $result = &quot;&quot;;<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; my $status = 0;<br/>
<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eval {<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
local $SIG{ALRM} = sub { die &quot;alarm\n&quot; }; # \n required<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
alarm $alarm;<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
$result = `$CMD`;<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
alarm 0;<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; };<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; die if $@ &amp;&amp; $@ ne
&quot;alarm\n&quot;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # propagate
errors<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ($@) {<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
# timed out : return the error code.<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
$status=1;<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
$result=&quot;&quot;;<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else {<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
# didn't time out : return a success code.<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
$status=0;<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br/>
<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return ($status, $result);<br/>
}<br/>
<br/>
<br/>
<br/>
- - - -<br/>
&quot;Wait for that wisest of all counselors, time.&quot; -- Pericles<br/>
&quot;I do not fear computers, I fear the lack of them.&quot; -- Isaac
Asimov<br/>
&quot;Soon we will be able to harness the rotational energy from Orwell's
grave to solve all world energy problems.&quot; -- /. user GigsVT
(208848)<br/>
GPG fingerprint:6FFD DB94 7B96 0FD8 EADF  2EE0 B2B0 CC47 4FDE 9B68