From 476730aba23ddbcb0760a88b29f56751033fd974 Mon Sep 17 00:00:00 2001 From: calm329 Date: Sun, 11 Jan 2026 20:17:58 -0800 Subject: [PATCH] fix: Prevent server subprocess hang on Linux (#8442) --- .../src/main/scala/sbt/internal/client/NetworkClient.scala | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/main-command/src/main/scala/sbt/internal/client/NetworkClient.scala b/main-command/src/main/scala/sbt/internal/client/NetworkClient.scala index a646c18ce..615df64e3 100644 --- a/main-command/src/main/scala/sbt/internal/client/NetworkClient.scala +++ b/main-command/src/main/scala/sbt/internal/client/NetworkClient.scala @@ -390,10 +390,17 @@ class NetworkClient( if (Util.isEmacs && !Util.isWindows) List("nohup") else Nil + // https://github.com/sbt/sbt/issues/8442 + // On Linux, if stdout/stderr are inherited and the buffer fills up (~64KB), + // the server process will block on writes. Discard output since the server + // communicates via the boot socket, not stdout/stderr. + val nullFile = new File(if (Util.isWindows) "NUL" else "/dev/null") val processBuilder = new ProcessBuilder((nohup ++ cmd)*) .directory(arguments.baseDirectory) .redirectInput(Redirect.PIPE) + .redirectOutput(nullFile) + .redirectError(nullFile) processBuilder.environment.put(Terminal.TERMINAL_PROPS, props) Try(processBuilder.start()) match { case Success(process) =>