Tengo un script que intenta hacer una conexión de base de datos utilizando otro programa y el tiempo de espera (2.5min) del programa es demasiado largo. Quiero agregar esta funcionalidad a la secuencia de comandos.¿Matar el proceso después de un tiempo determinado?
Si transcurren más de 5 segundos para conectarse, elimine el proceso
Else kill the sleep/kill process.
El problema que tengo es cómo informa bash cuando se mata un proceso, eso se debe a que los procesos están en el mismo shell solo en el fondo. ¿Hay una mejor manera de hacerlo o cómo puedo silenciar el shell para los comandos kill?
DB_CONNECTION_PROGRAM > $CONNECTFILE &
pid=$!
(sleep 5; kill $pid) &
sleep_pid=$!
wait $pid
# If the DB failed to connect after 5 seconds and was killed
status=$? #Kill returns 128+n (fatal error)
if [ $status -gt 128 ]; then
no_connection="ERROR: Timeout while trying to connect to $dbserver"
else # If it connected kill the sleep and any errors collect
kill $sleep_pid
no_connection=`sed -n '/^ERROR:/,$p' $CONNECTFILE`
fi
Encontré viejos scripts de Bash y son muy similares a tu.Estaba usando el bit-bucket (*/dev/null *) y * kill -9 * de forma mucho más liberal y no creo que hubiera mucho problema con * kill * mostrando un mensaje no deseado: curiosamente, ese código mío sigue siendo en uso, años después, ¡en mi símbolo del sistema! (Si hubiera problemas de visualización, lo vería en mi mensaje, creo). Ha pasado mucho tiempo sin tocarlo, pero parece que (todavía) funciona bien. – TacticalCoder
Recopilé la carne de mi script de shell Bash como respuesta. Espero eso ayude. – TacticalCoder
Eche un vistazo a esto: http://redflo.de/tiki-index.php?page=Bash+script+with+timeout+function –