30 lines
		
	
	
	
		
			861 B
		
	
	
	
		
			Text
		
	
	
	
	
	
		
		
			
		
	
	
			30 lines
		
	
	
	
		
			861 B
		
	
	
	
		
			Text
		
	
	
	
	
	
|   | #!/bin/sh | ||
|  | 
 | ||
|  | # Author: P@draigBrady.com | ||
|  | # V1.0  : Nov  3 2006 | ||
|  | # | ||
|  | #  Execute a command with a timeout. | ||
|  | #  If the timeout occurs the exit status is 128 | ||
|  | # | ||
|  | #  Note there is an asynchronous equivalent of this | ||
|  | #  script packaged with bash (under /usr/share/doc/ in my distro), | ||
|  | #  which I only noticed after writing this. | ||
|  | 
 | ||
|  | if [ "$#" -lt "2" ]; then | ||
|  |     echo "Usage:   `basename $0` timeout_in_seconds command" >&2 | ||
|  |     echo "Example: `basename $0` 2 sleep 3 || echo timeout" >&2 | ||
|  |     exit 1 | ||
|  | fi | ||
|  | 
 | ||
|  | cleanup() | ||
|  | { | ||
|  |     kill %1 2>/dev/null             #kill sleep $timeout if running | ||
|  |     kill %2 2>/dev/null && exit 128 #kill monitored job if running | ||
|  | } | ||
|  | 
 | ||
|  | set -m               #enable job control | ||
|  | trap "cleanup" 17    #cleanup after timeout or command | ||
|  | timeout=$1 && shift  #first param is timeout in seconds | ||
|  | sleep $timeout&      #start the timeout | ||
|  | "$@"                 #start the job |