tuto:linux:script_timeout_en_shell
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
tuto:linux:script_timeout_en_shell [2010/01/24 17:53] – root | tuto:linux:script_timeout_en_shell [2013/03/12 22:13] (Version actuelle) – root | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
====== Timeout en SHELL ====== | ====== Timeout en SHELL ====== | ||
- | < | + | **timeout.sh** |
+ | < | ||
#!/bin/sh | #!/bin/sh | ||
Ligne 61: | Ligne 62: | ||
</ | </ | ||
- | Un autre un peu moins optimisé : | + | ./ |
- | < | + | Un autre script s' |
+ | < | ||
#!/bin/bash | #!/bin/bash | ||
- | + | ||
- | timeout=$1 | + | dir_result="/ |
- | command=$2 | + | |
- | shift 2 | + | declare -a command |
- | + | ||
- | check_pid_name() { | + | usage() { |
- | | + | |
- | | + | |
- | [ -d / | + | |
- | [ $(grep -c $command / | + | |
} | } | ||
- | + | ||
- | [ -z " | + | kill_proc() { |
- | + | | |
- | safe_run() { | + | [ -d /proc/$pid ] && [ `grep $0 /proc/${pid}/ |
- | | + | done |
- | shift | + | |
- | $command | + | |
- | kill $$ | + | |
- | } | + | |
- | + | ||
- | safe_run | + | |
- | childpid=$! | + | |
- | sleep $timeout | + | |
- | + | ||
- | check_pid_name $command $childpid && | + | |
- | kill $childpid | + | |
- | sleep 0.1 | + | |
- | check_pid_name $command $childpid | + | |
- | | + | |
} | } | ||
+ | |||
+ | while getopts :h OPTION | ||
+ | do | ||
+ | case " | ||
+ | h) | ||
+ | usage | ||
+ | ;; | ||
+ | esac | ||
+ | done | ||
+ | |||
+ | |||
+ | nb_arg=`echo " | ||
+ | |||
+ | [ ! -d $dir_result ] && mkdir -p " | ||
+ | |||
+ | echo "Table des processus :" | ||
+ | |||
+ | for ((i=1; i< | ||
+ | do | ||
+ | log=`expr $i - 1` | ||
+ | cmd=`echo " | ||
+ | |||
+ | command[${# | ||
+ | |||
+ | if [ `echo " | ||
+ | timeout=`echo " | ||
+ | fi | ||
+ | |||
+ | if [ -z $timeout ] ; then | ||
+ | ( | ||
+ | $cmd 2>&1 1> | ||
+ | ret=$? | ||
+ | sleep 0.1 | ||
+ | echo "$! : Fait ($ret)" | ||
+ | [ $ret -ne 0 ] && exit 1 | ||
+ | ) & | ||
+ | else | ||
+ | ( | ||
+ | `dirname $0`/ | ||
+ | ret=$? | ||
+ | sleep 0.1 | ||
+ | if [ $ret -eq 0 ] ; then | ||
+ | echo "$! : Fait ($ret)" | ||
+ | else if [ $ret -eq 124 ] ; then | ||
+ | echo "$! : Timeout" | ||
+ | exit 1 | ||
+ | else | ||
+ | echo "$! : Fait($ret) !" | ||
+ | exit 1 | ||
+ | fi | ||
+ | fi | ||
+ | ) & | ||
+ | |||
+ | unset timeout | ||
+ | fi | ||
+ | |||
+ | command_pid[${# | ||
+ | done | ||
+ | |||
+ | for i in ${!command[*]} | ||
+ | do | ||
+ | if [ `echo ${command[i]} | awk '{ print $1 }' | grep " | ||
+ | echo " | ||
+ | else | ||
+ | echo " | ||
+ | fi | ||
+ | done | ||
+ | |||
+ | echo "" | ||
+ | |||
+ | trap ' | ||
+ | |||
+ | wait | ||
+ | |||
+ | for i in ${!command[*]} | ||
+ | do | ||
+ | [ -f " | ||
+ | done | ||
</ | </ | ||
- | ./script 2 sleep 4 | + |
tuto/linux/script_timeout_en_shell.txt · Dernière modification : 2013/03/12 22:13 de root