Forum Programmation.shell Limiter le temps maxi d'execution d'une commande

Posté par  .
Étiquettes : aucune
0
17
avr.
2008
Bonjour cher forum,

Je suis à la recherche d'un moyen de limiter le temps d'exécution d'une commande. Actuellement, je déclenche des scripts via rsh (oui je sais sécurité, ssh C mieux toussa... ce à quoi je répond vieux HP9000 ;p ) mais il arrve que le rsh se plante et ne rende jamais la main.

J'ai donc mis en place un script du genre:

#!/bin/bash
#
# Lance une commande rsh en forcant un kill après une durée de 5 sec
# pour eviter que rsh reste bloqué
#

# on execute le rsh en arrière plan
rsh "$@" &
# on récupère le PID du rsh
PID=$!
# au bout de 5 sec on kill le pid en question
sleep 5
kill -TERM $PID 2> /dev/null


Le problème de ça (outre le fait que ça soit moyennement propre) c'est que dans tous les cas, le script reste bloqué au minimum 5 sec. Existe-il un moyen plus efficace pour répondre a mon besoin?

D'avance merci.
  • # Utiliser jobs

    Posté par  . Évalué à 4.

    Il est possible d'utiliser la commande jobs pour lister les processus en arrière plan et ainsi faire une boucle pendant les 5 secondes, par exemple :

    #!/bin/bash
    #
    # Lance une commande rsh en forcant un kill après une durée de 5 sec
    # pour eviter que rsh reste bloqué
    #

    # on execute le rsh en arrière plan
    rsh "$@" &
    # on récupère le PID du rsh
    PID=$!

    for i in $(seq 5)
    do
        #options de jobs
        # -p affiche le PID des processus en backgroupd
        # -r n'affiche que les processus qui sont en cours d'execution (pas ceux qui sont déjà terminés)
        # Si le process est terminé, on peut quitter tranquillement.
        jobs -pr | grep -q $PID || exit
        sleep 1
    done

    # au bout de 5 sec on kill le pid en question
    kill -TERM $PID 2> /dev/null
  • # timelimit

    Posté par  . Évalué à 5.

    J'ai utilisé avec succès "timelimit".

    http://devel.ringlet.net/sysutils/timelimit/

    Je pense que ça se compile au poil sur une machine comme la tienne.
  • # Merci

    Posté par  . Évalué à 1.

    Merci, je vais creuser un peu ces 2 pistes.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.