Das kaufmännische Und & führt einen Befehl in einem neuen Prozess im Hintergrund aus. Wenn der übergeordnete Prozess (in Ihrem Fall der Befehl, mit dem das Bash-Skript ausgeführt wird) endet, setzt dieser Hintergrundprozess seinen übergeordneten Prozess auf init (Prozess mit PID
1) zurück, stirbt jedoch nicht. Wenn Sie drücken ctrl+c
, senden Sie ein Interrupt-Signal an den Vordergrundprozess, und der Hintergrundprozess wird dadurch nicht beeinflusst.
Um den Hintergrundprozess zu beenden, sollten Sie den kill
Befehl mit dem PID
neuesten Hintergrundprozess verwenden, den Sie mit erhalten können $!
.
Wenn Sie möchten ctrl+c
, dass sowohl das Skript als auch der Hintergrundprozess beendet werden, können Sie Folgendes tun:
trap 'kill $BGPID; exit' SIGINT sleep 1024 & # background command BGPID=$! sleep 1024 # foreground command of the script
trap
ändert den Trap-Handler des, SIGINT
so dass das Skript den Prozess mit beendet, $BGPID
bevor es beendet wird.