Am einfachsten ist es, den timeout(1)
zu verwenden Befehl, Teil von GNU Coreutils, also so ziemlich überall verfügbar, wo Bash installiert ist:
timeout 60 wget ..various wget args..
oder wenn Sie wget hart töten wollen, wenn es zu lange läuft:
timeout -s KILL 60 wget ..various wget args..
Sie können den wget-Befehl als Hintergrundprozess ausführen und einen SIGKILL senden, um ihn nach einer bestimmten Zeit im Ruhezustand zwangsweise zu beenden.
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
Erklärung:
wget ... &
- die&
Notation am Ende führt den Befehl im Hintergrund statt im Vordergrund
aus wget_pid=$!
-$!
ist eine spezielle Shell-Variable, die die Prozess-ID des zuletzt ausgeführten Befehls enthält. Hier speichern wir es in einer Variablen namenswget_pid
.while [[ -n $(ps -e) | grep "$wget_pid") && "$counter" -lt "$timeout" ]]
- Suchen Sie jede Sekunde nach dem Prozess, wenn er noch da ist, warten Sie weiter, bis ein Timeout-Limit erreicht ist.kill -s SIGKILL "$wget_pid"
- Wir verwendenkill
um den im Hintergrund laufenden wget-Prozess zwangsweise zu beenden, indem Sie ihm ein SIGKILL-Signal senden.