From 9516e10dbe12d9649e7ccbb448a1829ede5cfed7 Mon Sep 17 00:00:00 2001 From: Eric Peters Date: Thu, 21 Oct 2021 09:03:54 -0700 Subject: [PATCH] [#6696] Add shutdownall to sbt runner to shutdown all sbt-launch processes --- launcher-package/src/universal/bin/sbt.bat | 18 +++++++++++++++++- sbt | 9 +++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/launcher-package/src/universal/bin/sbt.bat b/launcher-package/src/universal/bin/sbt.bat index 1a59fd9e1..fb325c19a 100755 --- a/launcher-package/src/universal/bin/sbt.bat +++ b/launcher-package/src/universal/bin/sbt.bat @@ -25,6 +25,7 @@ set default_java_opts=-Dfile.encoding=UTF-8 set sbt_jar= set build_props_sbt_version= set run_native_client= +set shutdownall= set sbt_args_print_version= set sbt_args_print_sbt_version= @@ -399,6 +400,11 @@ if defined _timings_arg ( goto args_loop ) +if "%~0" == "shutdownall" ( + set shutdownall=1 + goto args_loop +) + if "%~0" == "--script-version" ( set sbt_args_print_sbt_script_version=1 goto args_loop @@ -508,7 +514,7 @@ goto args_loop rem Confirm a user's intent if the current directory does not look like an sbt rem top-level directory and the "new" command was not given. -if not defined sbt_args_sbt_create if not defined sbt_args_print_version if not defined sbt_args_print_sbt_version if not defined sbt_args_print_sbt_script_version if not exist build.sbt ( +if not defined sbt_args_sbt_create if not defined sbt_args_print_version if not defined sbt_args_print_sbt_version if not defined sbt_args_print_sbt_script_version if not defined shutdownall if not exist build.sbt ( if not exist project\ ( if not defined sbt_new ( echo [warn] Neither build.sbt nor a 'project' directory in the current directory: "%CD%" @@ -535,6 +541,16 @@ call :process rem avoid bootstrapping/java version check for script version +if !shutdownall! equ 1 ( + set count=0 + for /f "tokens=1" %%i in ('jps -lv ^| findstr "xsbt.boot.Boot"') do ( + taskkill /F /PID %%i + set /a count=!count!+1 + ) + echo shutdown !count! sbt processes + goto :eof +) + if !sbt_args_print_sbt_script_version! equ 1 ( echo !init_sbt_version! goto :eof diff --git a/sbt b/sbt index 3c20ecc21..c14c2ec32 100755 --- a/sbt +++ b/sbt @@ -10,6 +10,7 @@ declare -a sbt_options declare -a print_version declare -a print_sbt_version declare -a print_sbt_script_version +declare -a shutdownall declare -a original_args declare java_cmd=java declare java_version @@ -494,6 +495,12 @@ run() { elif [[ $print_version ]]; then execRunner "$java_cmd" -jar "$sbt_jar" "sbtVersion" | tail -1 | sed -e 's/\[info\]/sbt version in this project:/g' echo "sbt script version: $init_sbt_version" + elif [[ $shutdownall ]]; then + local sbt_processes=( $(jps -v | grep sbt-launch | cut -f1 -d ' ') ) + for procId in "${sbt_processes[@]}"; do + kill -9 $procId + done + echo "shutdown ${#sbt_processes[@]} sbt processes" else # run sbt execRunner "$java_cmd" \ @@ -532,6 +539,7 @@ Usage: `basename "$0"` [options] -V | --version print sbt version information --numeric-version print the numeric sbt version (sbt sbtVersion) --script-version print the version of sbt script + shutdownall shutdown all running sbt-launch processes -d | --debug set sbt log level to debug -debug-inc | --debug-inc enable extra debugging for the incremental debugger @@ -647,6 +655,7 @@ process_args () { -V|-version|--version) print_version=1 && shift ;; --numeric-version) print_sbt_version=1 && shift ;; --script-version) print_sbt_script_version=1 && shift ;; + shutdownall) shutdownall=1 && shift ;; -d|-debug|--debug) sbt_debug=1 && addSbt "-debug" && shift ;; -client|--client) use_sbtn=1 && shift ;; --server) use_sbtn=0 && shift ;;