GNU/Linux >> Linux Esercitazione >  >> Linux

Forza wget al timeout

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 piano
  • wget_pid=$! - $! è una speciale variabile di shell che contiene l'id di processo del comando eseguito più di recente. Qui lo salviamo in una variabile chiamata wget_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" - Usiamo kill per terminare forzatamente il processo wget in esecuzione in background inviandogli un segnale SIGKILL.

Linux
  1. Uccidi silenziosamente Subshell?

  2. Esempi di comandi wget in Linux

  3. Waitpid equivalente con timeout?

  4. Uccidi la sessione dello schermo indipendente

  5. Come uccidere un processo figlio dopo un determinato timeout in Bash?

Come uccidere un processo in Linux

Kill Command in Linux

Comando di timeout in Linux

Come forzare Wget a utilizzare la connessione IPv4 o IPv6

Come KILL un processo su Linux

Come aumentare il timeout nello stucco?