GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie verwendet man Strg+C, um alle Hintergrundprozesse zu beenden, die in einem Bash-Skript gestartet wurden?

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.


Linux
  1. So verwenden Sie ein verschlüsseltes Passwort in einem Linux-Bash-Shell-Skript

  2. So verwenden Sie die Bedingungsanweisung if else in Bash-Skript

  3. Wie kann man einen untergeordneten Prozess nach einem bestimmten Timeout in Bash beenden?

  4. Wie kann man alle Prozesse mit einem bestimmten Teilnamen beenden?

  5. Wie beendet man alle Hintergrundprozesse in zsh?

Wie beendet man einen Prozess in Linux? Befehle zum Beenden

So beenden Sie einen Prozess in Linux

So verwenden Sie den htop-Befehl, um Systemprozesse in Echtzeit zu überwachen

So beenden Sie Zombie-Prozesse in Linux

So senden Sie Prozesse unter Linux an den Hintergrund

So töten Sie Zombie-Prozesse in Ubuntu