Le plus simple est d'utiliser le timeout(1)
commande, faisant partie de GNU coreutils, donc disponible à peu près partout où bash est installé :
timeout 60 wget ..various wget args..
ou si vous voulez hard-kill wget s'il tourne trop longtemps :
timeout -s KILL 60 wget ..various wget args..
Vous pouvez exécuter la commande wget en tant que processus d'arrière-plan et envoyer un SIGKILL pour le tuer de force après avoir dormi pendant un certain temps.
wget ... &
wget_pid=$!
counter=0
timeout=60
while [[ -n $(ps -e) | grep "$wget_pid") && "$counter" -lt "$timeout" ]]
do
sleep 1
counter=$(($counter+1))
done
if [[ -n $(ps -e) | grep "$wget_pid") ]]; then
kill -s SIGKILL "$wget_pid"
fi
Explication :
wget ... &
- le&
la notation à la fin exécute la commande en arrière-plan par opposition au premier planwget_pid=$!
-$!
est une variable shell spéciale qui contient l'ID de processus de la dernière commande exécutée. Ici, nous l'enregistrons dans une variable appeléewget_pid
.while [[ -n $(ps -e) | grep "$wget_pid") && "$counter" -lt "$timeout" ]]
- Recherchez le processus toutes les secondes, s'il est toujours là, continuez d'attendre jusqu'à un délai d'expiration.kill -s SIGKILL "$wget_pid"
- Nous utilisonskill
pour tuer de force le processus wget exécuté en arrière-plan en lui envoyant un signal SIGKILL.