E 'possibile in bash intercettare un SIGINT, fare qualcosa, e quindi ignorarlo (mantenere bash in esecuzione).Catch SIGINT in bash, handle AND ignora
so che posso ignorare il SIGINT con
trap '' SIGINT
E posso anche fare qualcosa sul SIGINT con
trap handler SIGINT
ma che ancora fermare lo script dopo le handler
esegue. Per esempio.
#!/bin/bash
handler()
{
kill -s SIGINT $PID
}
program &
PID=$!
trap handler SIGINT
wait $PID
#do some other cleanup with results from program
Quando si preme Ctrl + c, verrà inviato il SIGINT al programma, ma bash salterà la wait
PRIMA programma è stato chiuso correttamente e ha creato la sua uscita nel suo gestore di segnale.
Utilizzando risposta @suspectus posso cambiare il wait $PID
a:
while kill -0 $PID > /dev/null 2>&1
do
wait $PID
done
Questo funziona in realtà per me sono sicuro che appena non al 100%, se questo è 'pulito' o di una 'soluzione sporca'.
perché dovrebbe stampare più volte? – cnicutar
@cnicutar: Se preme ctrl + c più volte (cosa che non posso nel modulo corrente, perché si ferma dopo il primo) – Zulan
Ho cambiato il mio esempio per essere più vicino al caso d'uso reale. – Zulan