From b58c0fb37faa8c71cacb72e0a9f73574f5de238b Mon Sep 17 00:00:00 2001 From: MkDev11 Date: Wed, 14 Jan 2026 15:57:50 -0500 Subject: [PATCH] [2.x] fix: Cleanup child processes on sbt exit (#8532) When using fork := true, sbt spawns child processes that may become stale if cancelled. Previously, these processes were not cleaned up when running the exit command. This fix adds RunningProcesses.killAll() to the shutdown hook so that all tracked forked processes are terminated when sbt exits. Fixes #7468 --- main/src/main/scala/sbt/Main.scala | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/main/src/main/scala/sbt/Main.scala b/main/src/main/scala/sbt/Main.scala index eca59bd5d..d30dc5895 100644 --- a/main/src/main/scala/sbt/Main.scala +++ b/main/src/main/scala/sbt/Main.scala @@ -29,7 +29,7 @@ import sbt.internal.server.{ BuildServerProtocol, NetworkChannel } import sbt.internal.util.Terminal.hasConsole import sbt.internal.util.Types.{ const, idFun } import sbt.internal.util.complete.Parser -import sbt.internal.util.{ Terminal as ITerminal, * } +import sbt.internal.util.{ RunningProcesses, Terminal as ITerminal, * } import sbt.io.* import sbt.io.syntax.* import sbt.util.{ Level, Logger, Show } @@ -221,6 +221,7 @@ object StandardMain { }) private val closeRunnable = () => { + RunningProcesses.killAll() exchange.shutdown() pool.foreach(_.shutdownNow()) }