Timeout on shell command.
Maarten Litmaath
maart at cs.vu.nl
Fri Aug 17 00:13:25 AEST 1990
In article <3716 at sactoh0.UUCP>,
jak at sactoh0.UUCP (Jay A. Konigsberg) writes:
)...
)command & # execute in background
What if the command is supposed to run in the _foreground_?
The following timeout shell script can be easily converted to a C program
if desired.
--------------------cut here--------------------
#!/bin/sh
# @(#)timeout 6.2 90/03/01 Maarten Litmaath
prog=`basename $0`
usage="Usage: $prog [-signal] [timeout] [:interval] [+delay] [--] <command>"
SIG=-KILL # default signal sent to the process when the timer expires,
# unless a delay option has been given: then it is -TERM
sigopt=0
timeout=60 # default timeout
interval=15 # default interval between checks if the process is still alive
delay= # (if specified) the delay between posting the given signal and
# destroying the process (kill -KILL)
while :
do
case $1 in
--)
shift
break
;;
-*)
SIG=$1
sigopt=1
;;
[0-9]*)
timeout=$1
;;
:*)
EXPR='..\(.*\)'
interval=`expr x"$1" : "$EXPR"`
;;
+*)
EXPR='..\(.*\)'
delay=`expr x"$1" : "$EXPR"`
case $sigopt in
0)
SIG=-TERM
esac
;;
*)
break
esac
shift
done
case $# in
0)
echo "$usage" >&2
exit 2
esac
(
for t in $timeout $delay
do
while test $t -gt $interval
do
sleep $interval
kill -0 $$ || exit
t=`expr $t - $interval`
done
sleep $t
kill $SIG $$ && kill -0 $$ || exit
SIG=-KILL
done
) 2> /dev/null &
exec "$@"
--
"UNIX was never designed to keep people from doing stupid things, because
that policy would also keep them from doing clever things." (Doug Gwyn)
More information about the Alt.sources
mailing list