1#Newsgroups: comp.unix.admin,comp.unix.solaris,comp.unix.shell
2#From: gwc@root.co.uk (Geoff Clare)
3#Subject: Re: timeout -t <sec> <unix command> (Re: How to give rsh a shorter timeout?)
4#Message-ID: <EoBxrs.223@root.co.uk>
5#Date: Fri, 13 Feb 1998 18:23:52 GMT
6
7#
8# Conversion to bash v2 syntax done by Chet Ramey <chet@po.cwru.edu
9# UNTESTED
10#
11
12prog=${0##*/}
13usage="usage: $prog [-signal] [timeout] [:interval] [+delay] [--] <command>"
14
15SIG=-TERM	# default signal sent to the process when the timer expires
16timeout=60	# default timeout
17interval=15	# default interval between checks if the process is still alive
18delay=2		# default delay between posting the given signal and
19		# destroying the process (kill -KILL)
20
21while :
22do
23	case $1 in
24	--)	shift; break ;;
25	-*)	SIG=$1 ;;
26	[0-9]*)	timeout=$1 ;;
27	:*)	EXPR='..\(.*\)' ; interval=`expr x"$1" : "$EXPR"` ;;
28	+*)	EXPR='..\(.*\)' ; delay=`expr x"$1" : "$EXPR"` ;;
29	*)	break ;;
30	esac
31	shift
32done
33
34case $# in
350)	echo "$prog: $usage" >&2 ; exit 2 ;;
36esac
37
38(
39	for t in $timeout $delay
40	do
41		while (( $t > $interval ))
42		do
43			sleep $interval
44			kill -0 $$ || exit
45			t=$(( $t - $interval ))
46		done
47		sleep $t
48		kill $SIG $$ && kill -0 $$ || exit
49		SIG=-KILL
50	done
51) 2> /dev/null &
52
53exec "$@"
54