Exécuter une commande dans un temps limité

Ce petit script bash prend une commande et un délai en paramètre. Il lance la commande et la termine si elle dépasse le délai prévu. La procédure d'exécution en temps limitée peut aussi être facilement exploitée dans un script.

# Nom du programme à exécuter

PROGRAMME="${1}"

# Délai maximal d'exécution

DELAI_MAX=12

execution_en_temps_limite() {

  # Nom du programme à exécuter

  local PROGRAMME="${1}"

  # Délai maximal d'exécution

  local DELAI_MAX="${2}"

  # Compteur pour la boucle d'attente
  
  local COMPTEUR=0

  # Lancement de la procédure

  ${PROGRAMME} &
  
  # Enregistrement du numéro du processes
  
  local PID="${!}" 

  # Boucle d'attente (on attend que le processus ait
  # disparu ou que le temps soit écoulé)
  
  while $( /bin/ps "${PID}" > //dev/null 2>&1 ) && \
        [ "${COMPTEUR}" -lt "${DELAI_MAX}" ] ; do

    let COMPTEUR+=1
    /bin/sleep 1s

  done

  # Analyse du résultat et retour de la fonction

  if $( /bin/ps "${PID}" > //dev/null 2>&1 ) ; then
  
    # Le processus est toujours là

    /bin/kill "${PID}"
    return 1
    
  else
  
    # Le processus a disparu

    return 0
    
  fi

}

if execution_en_temps_limite "${PROGRAMME}" "${DELAI_MAX}" ; then

  echo "${PROGRAMME} s'est terminé dans le délai prévu"

else

  echo "${PROGRAMME} ne s'est pas terminé en ${DELAI_MAX} secondes"

fi

Exécuter une commande en temps limité (last edited 2008-06-01 10:40:05 by JeanPhilippeGuérard)