La forma más fácil es usar el timeout(1)
comando, parte de GNU coreutils, por lo que está disponible prácticamente en cualquier lugar donde esté instalado bash:
timeout 60 wget ..various wget args..
o si desea matar a wget por mucho tiempo:
timeout -s KILL 60 wget ..various wget args..
Puede ejecutar el comando wget como un proceso en segundo plano y enviar un SIGKILL para matarlo a la fuerza después de dormir durante un cierto período de tiempo.
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
Explicación:
wget ... &
- el&
la notación al final ejecuta el comando en segundo plano en lugar de en primer planowget_pid=$!
-$!
es una variable de shell especial que contiene la identificación del proceso del comando ejecutado más recientemente. Aquí lo guardamos en una variable llamadawget_pid
.while [[ -n $(ps -e) | grep "$wget_pid") && "$counter" -lt "$timeout" ]]
- Busque el proceso cada segundo, si todavía está allí, siga esperando hasta un límite de tiempo de espera.kill -s SIGKILL "$wget_pid"
- Usamoskill
para eliminar a la fuerza el proceso wget que se ejecuta en segundo plano enviándole una señal SIGKILL.