Aktualisierung:trap
erfordert das Entfernen von SIG
prefix on condition, obwohl einige Shells es unterstützen. Siehe Kommentar unten.
Das kaufmännische Und "&" führt einen Befehl im Hintergrund in einem neuen Prozess aus. Wenn sein übergeordneter Prozess (der Befehl, der in Ihrem Fall das Bash-Skript ausführt) endet, setzt dieser Hintergrundprozess seinen übergeordneten Prozess auf init zurück (Prozess mit PID
). 1), stirbt aber nicht. Wenn Sie ctrl+c
drücken , senden Sie ein Interrupt-Signal an den Vordergrundprozess, das den Hintergrundprozess nicht beeinflusst.
Um den Hintergrundprozess zu beenden, sollten Sie den kill
verwenden Befehl mit dem PID
des neuesten Hintergrundprozesses, den Sie mit $!
erhalten konnten .
Wenn Sie möchten, dass ctrl+c
verwendet wird Um sowohl das Skript als auch den Hintergrundprozess zu beenden, können Sie Folgendes tun:
trap 'kill $BGPID; exit' INT
sleep 1024 & # background command
BGPID=$!
sleep 1024 # foreground command of the script
trap
modifiziert den Trap-Handler von SIGINT
(trap
erfordert das Entfernen von SIG
Präfix, aber einige Shells unterstützen es möglicherweise), sodass das Skript den Prozess mit $BGPID
beendet bevor es beendet wird.