Line | |
---|
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 |
|
---|
12 | prog=${0##*/}
|
---|
13 | usage="usage: $prog [-signal] [timeout] [:interval] [+delay] [--] <command>"
|
---|
14 |
|
---|
15 | SIG=-TERM # default signal sent to the process when the timer expires
|
---|
16 | timeout=60 # default timeout
|
---|
17 | interval=15 # default interval between checks if the process is still alive
|
---|
18 | delay=2 # default delay between posting the given signal and
|
---|
19 | # destroying the process (kill -KILL)
|
---|
20 |
|
---|
21 | while :
|
---|
22 | do
|
---|
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
|
---|
32 | done
|
---|
33 |
|
---|
34 | case $# in
|
---|
35 | 0) echo "$prog: $usage" >&2 ; exit 2 ;;
|
---|
36 | esac
|
---|
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 |
|
---|
53 | exec "$@"
|
---|
Note:
See
TracBrowser
for help on using the repository browser.