29 lines
		
	
	
	
		
			861 B
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			29 lines
		
	
	
	
		
			861 B
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
| #!/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
 | 
