Il modo più semplice è usare timeout(1)
comando, parte di GNU coreutils, quindi disponibile praticamente ovunque sia installato bash:
timeout 60 wget ..various wget args..
o se vuoi uccidere wget se sta funzionando troppo a lungo:
timeout -s KILL 60 wget ..various wget args..
Puoi eseguire il comando wget come processo in background e inviare un SIGKILL per ucciderlo forzatamente dopo aver dormito per un certo periodo di tempo.
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
Spiegazione:
wget ... &
- il&
la notazione alla fine esegue il comando in background invece che in primo pianowget_pid=$!
-$!
è una speciale variabile di shell che contiene l'id di processo del comando eseguito più di recente. Qui lo salviamo in una variabile chiamatawget_pid
.while [[ -n $(ps -e) | grep "$wget_pid") && "$counter" -lt "$timeout" ]]
- Cerca il processo ogni secondo, se è ancora presente, continua ad attendere fino a un limite di timeout.kill -s SIGKILL "$wget_pid"
- Usiamokill
per terminare forzatamente il processo wget in esecuzione in background inviandogli un segnale SIGKILL.