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.