Mise à jour :trap nécessite la suppression de SIG préfixe à condition, bien que certains shells prennent en charge son inclusion. Voir commentaire ci-dessous.
L'esperluette "&" exécute une commande en arrière-plan dans un nouveau processus. Lorsque son processus parent (la commande qui exécute le script bash dans votre cas) se termine, ce processus d'arrière-plan réinitialisera son processus parent sur init (processus avec PID 1), mais ne mourra pas. Lorsque vous appuyez sur ctrl+c , vous envoyez un signal d'interruption au processus de premier plan, et cela n'affectera pas le processus d'arrière-plan.
Afin de tuer le processus d'arrière-plan, vous devez utiliser le kill commande avec le PID du processus d'arrière-plan le plus récent, qui pourrait être obtenu par $! .
Si vous souhaitez utiliser ctrl+c pour tuer à la fois le script et le processus d'arrière-plan, vous pouvez faire ceci :
trap 'kill $BGPID; exit' INT
sleep 1024 & # background command
BGPID=$!
sleep 1024 # foreground command of the script
trap modifie le trap handler du SIGINT (trap nécessite la suppression du SIG préfixe mais certains shell peuvent le prendre en charge) afin que le script tue le processus avec $BGPID avant de quitter.