Я нашел следующее полезное, когда у меня есть контроль над основным циклом запуска приложения из sbt.
Я говорю sbt разветвляться при запуске приложения (в build.sbt):
fork in run := true
Я также говорю sbt пересылать stdin из оболочки sbt в приложение (в build.sbt):
connectInput in run := true
Наконец, в главном потоке приложения я ждуконец файла в stdin и затем выключение JVM:
while (System.in.read() != -1) {}
logger.warn("Received end-of-file on stdin. Exiting")
// optional shutdown code here
System.exit(0)
Конечно, вы можете использовать любой поток для чтения stdin и завершения работы, а не только основной поток.
Наконец,запустите sbt, при необходимости переключитесь на подпроект, который вы хотите запустить, запустите.
Теперь, когда вы хотите остановить процесс, закройте его стандартный ввод, введя CTRL-D в оболочке sbt.