Ho uno script che tenta di stabilire una connessione DB utilizzando un altro programma e il timeout (2.5min) del programma è troppo lungo. Voglio aggiungere questa funzionalità allo script.Processo di uccisione dopo un determinato intervallo di tempo?
Se per la connessione occorrono più di 5 secondi, interrompere il processo
Altrimenti chiudere il processo di sospensione/interruzione.
Il problema che sto verificando è come i report di bash quando un processo viene ucciso, perché i processi si trovano nella stessa shell solo sullo sfondo. C'è un modo migliore per farlo o come posso silenziare la shell per i comandi 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
Ho trovato i vecchi script Bash e sono molto simili ai tuoi.Stavo usando il bit-bucket (*/dev/null *) e * kill -9 * molto più liberamente e non penso ci fosse molto problema con * kill * che mostrava messaggi indesiderati: stranamente quel codice è ancora in uso, anni dopo, nel mio prompt dei comandi! (se ci fossero problemi di visualizzazione lo vedrei nel mio prompt, credo). È da tanto che non l'ho toccato, ma sembra (ancora) funzionare bene. – TacticalCoder
Ho ricopiato la carne del mio script di shell Bash come risposta. Spero che sia d'aiuto. – TacticalCoder
Dai un'occhiata a questo: http://redflo.de/tiki-index.php?page=Bash+script+with+timeout+function –