User Tools

Site Tools


mgenay:technique:timeoutksh

= Timeout.ksh =

#!/bin/ksh
## ==============================================================================================
##                     TimeOut Command
## ==============================================================================================
##  Nom du fichier :  ./timeout.ksh temps commande paramètres
##
## ==============================================================================================
##  Description    : Attend que la commande se termine
##		     si la commande n est pas terminée après "temps" secondes
##		     la commande est "killée"
## ==============================================================================================
 
#option -m : les background processes ont un pgid different
set -m
temps=$1
shift
 
#Premier shell, la commande à lancer
/bin/ksh -c "
  sleep 2
  $*
" &
waitedPid=$!
 
#Si le premier shell dure trop longtemps, il sera killé par le second
/bin/ksh -c "
  sleep $temps
  >/dev/null 2>&1 kill -0 -$waitedPid && kill -15 -$waitedPid
" &
killerPid=$!
 
#On attend donc la fin normale (ou provoquée) du 1er shell
#Le code retour sera celui de la commande
wait $waitedPid > /dev/null 2>&1
exitCode=$?
 
#Si le premier shell s est terminé avant la second, on kill le second qui ne sert plus à rien
#En fait, un exitCode > 127 ne survient qu après un kill, donc si l exitCode est inférieur, c est une fin "non killé"
[[ $exitCode -le 127 ]] && >/dev/null 2>&1 kill -0 -$killerPid && kill -15 -$killerPid
 
return $exitCode
mgenay/technique/timeoutksh.txt · Last modified: by 127.0.0.1