Exécuter une commande en 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.

Exécuter une commande dans un temps limité

#!/bin/bash

# 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

Licence : CC-BY