GNU/Linux >> Znalost Linux >  >> Linux

Jak použít Ctrl+C k ukončení všech procesů na pozadí spuštěných ve skriptu Bash?

Aktualizace:trap vyžaduje odstranění SIG předpona pod podmínkou, ačkoli některé shelly ji podporují. Viz komentář níže.

Ampersand "&" spustí příkaz na pozadí v novém procesu. Když jeho nadřazený proces (ve vašem případě příkaz, který spouští bash skript), tento proces na pozadí resetuje svůj nadřazený proces na init (proces s PID 1), ale nezemře. Když stisknete ctrl+c , posíláte signál přerušení do procesu na popředí a neovlivní proces na pozadí.

Chcete-li zastavit proces na pozadí, měli byste použít kill příkaz s PID nejnovějšího procesu na pozadí, který lze získat pomocí $! .

Pokud chcete použít ctrl+c Chcete-li ukončit proces skriptu i pozadí, můžete provést toto:

trap 'kill $BGPID; exit' INT
sleep 1024 &    # background command
BGPID=$!
sleep 1024      # foreground command of the script

trap upravuje obsluhu pasti SIGINT (trap vyžaduje odstranění SIG prefix, ale některý shell může podporovat jeho zahrnutí), takže skript proces ukončí pomocí $BGPID než vystoupí.


Linux
  1. Jak používat šifrované heslo ve skriptu Linux Bash Shell

  2. Jak používat příkaz if else Conditionals ve skriptu Bash

  3. Co jsou zombie procesy a jak najít a zabít zombie procesy?

  1. Jak monitorovat nebo zabít proces, který spustil Cron?

  2. Jak najít všechny podřízené procesy?

  3. Jak zabít podřízený proces po daném časovém limitu v Bash?

  1. bash:tiché ukončení procesu funkce pozadí

  2. Jak zabít všechny procesy s daným částečným názvem?

  3. Jak zabít všechny procesy na pozadí v zsh?