O e comercial "&" executa um comando em segundo plano em um novo processo. Quando seu processo pai (o comando que executa o script bash no seu caso) terminar, esse processo em segundo plano redefinirá seu processo pai para init (processo com PID 1), mas não morrerá. Quando você pressiona ctrl+c , você está enviando um sinal de interrupção para o processo em primeiro plano, e isso não afetará o processo em segundo plano.
Para eliminar o processo em segundo plano, você deve usar o comando kill com o PID do processo em segundo plano mais recente, que pode ser obtido por $! .
Se você quiser usar ctrl+c para matar o script e o processo em segundo plano, faça o seguinte:
trap 'kill $BGPID; exit' SIGINT
sleep 1024 & # background command
BGPID=$!
sleep 1024 # foreground command of the script
trap modifica o manipulador de traps do SIGINT , então o script mata o processo com $BGPID antes de sair.