Actualización:trap
requiere eliminar SIG
prefijo bajo condición, aunque algunos shells admiten incluirlo. Ver comentario a continuación.
El signo "&" ejecuta un comando en segundo plano en un nuevo proceso. Cuando finaliza su proceso principal (el comando que ejecuta el script bash en su caso), este proceso en segundo plano restablecerá su proceso principal a init (proceso con PID
1), pero no morirá. Cuando presionas ctrl+c
, está enviando una señal de interrupción al proceso en primer plano y no afectará al proceso en segundo plano.
Para eliminar el proceso en segundo plano, debe usar kill
comando con el PID
del proceso en segundo plano más reciente, que podría obtenerse mediante $!
.
Si desea usar ctrl+c
para eliminar tanto el script como el proceso en segundo plano, puede hacer esto:
trap 'kill $BGPID; exit' INT
sleep 1024 & # background command
BGPID=$!
sleep 1024 # foreground command of the script
trap
modifica el manejador de trampas del SIGINT
(trap
requiere eliminar el SIG
prefijo pero algunos shell pueden admitir incluirlo), por lo que el script eliminará el proceso con $BGPID
antes de que salga.