Atrapa SIGINT en bash, maneja Y ignora
¿Es posible en bash interceptar un SIGINT, hacer algo y luego ignorarlo (mantener a bash en ejecución)?
Sé que puedo ignorar el SIGINT con
trap '' SIGINT
Y también puedo hacer algo en el sigint con
trap handler SIGINT
Pero eso aún detendrá el guión después de lahandler
ejecuta P.ej.
#!/bin/bash
handler()
{
kill -s SIGINT $PID
}
program &
PID=$!
trap handler SIGINT
wait $PID
#do some other cleanup with results from program
Cuando presiono ctrl + c, se enviará el SIGINT para programar, pero bash saltará elwait
ANTES de que el programa se cerrara correctamente y creara su salida en su controlador de señales.
Usando la respuesta @suspectus puedo cambiar elwait $PID
a:
while kill -0 $PID > /dev/null 2>&1
do
wait $PID
done
Esto realmente funciona para mí, no estoy 100% seguro de si esto es 'limpio' o una 'solución sucia'.