[Omaha.pm] SAMPLE: Timed execute of external command with timeout.

Daniel Linder dan at linder.org
Wed Apr 5 17:46:10 PDT 2006



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... :-)



Months ago I wrote a script that ran an external program and parsed the
output for errors.  Unfortunatly, one of the errors that I did not
anticipate was the external program hanging forever.  The usual

     $result = `/path/to/cmd`;

hung and never returned -- thus the script never completed.



I ended up writing this subroutine to call the command with a timeout
window defined.

example:

     ($TimeoutStatus, $CmdResult) =
timedexec(90,"/path/to/cmd");

This will call the program "command" and wait 90 seconds for it
to complete.  The returned value in $TimeoutStatus will be 0(success)
or 1(failure).  The value in $CmdResult will be the text output
returned by the command (to stdout).



Dan



sub timedexec {

# timedexec : This subroutine will run a command within a specified time

#            
window (in seconds).

# RETURNS : Returns an array of two elements:

#  Success : first element is 0

#            second
element is the text returned by the command.

#  Failure : first element is 1

#            second
element is empty.

#

        my $alarm=shift;

        my $CMD=shift;

        my $result = "";

        my $status = 0;



        eval {

               
local $SIG{ALRM} = sub { die "alarm\n" }; # \n required

               
alarm $alarm;

               
$result = `$CMD`;

               
alarm 0;

        };

        die if $@ && $@ ne
"alarm\n";       # propagate
errors

        if ($@) {

               
# timed out : return the error code.

               
$status=1;

               
$result="";

        }

        else {

               
# didn't time out : return a success code.

               
$status=0;

        }



        return ($status, $result);

}







- - - -

"Wait for that wisest of all counselors, time." -- Pericles

"I do not fear computers, I fear the lack of them." -- Isaac
Asimov

"Soon we will be able to harness the rotational energy from Orwell's
grave to solve all world energy problems." -- /. user GigsVT
(208848)

GPG fingerprint:6FFD DB94 7B96 0FD8 EADF  2EE0 B2B0 CC47 4FDE 9B68
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.pm.org/pipermail/omaha-pm/attachments/20060406/2493a230/attachment.html


More information about the Omaha-pm mailing list