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 verwendenkillum den im Hintergrund laufenden wget-Prozess zwangsweise zu beenden, indem Sie ihm ein SIGKILL-Signal senden.