SBT остановить запустить без выхода

97

Как вы завершаете запуск в SBT без выхода?

Я пытаюсь CTRL + C, но он выходит из SBT. Есть ли способ выйти из работающего приложения, не открывая SBT?

  • 0
    CTRL + D , нет?
  • 0
    Ctrl+D не работает.
Показать ещё 1 комментарий
Теги:
sbt
terminate

3 ответа

40
Лучший ответ

В конфигурации по умолчанию ваши прогоны происходят в той же JVM, что и sbt, поэтому вы не можете просто убить их отдельно.

Если вы выполняете свой запуск в отдельной, разветвленной JVM, как описано в Forking, вы можете убить эту JVM (любым означает, что ваша операционная система предлагает), не затрагивая sbt JVM:

fork in run := true
  • 9
    Я пытаюсь сделать это. В частности, я реализовал: stackoverflow.com/questions/3868863/… но sbt по-прежнему завершается, когда я нажимаю CTRL + C. Как мне убить только разветвленную JVM?
  • 2
    с помощью kill из командной строки, либо в диспетчере задач (Windows), либо принудительно завершить работу, либо в мониторе активности (Mac OS X) и т. д.
Показать ещё 4 комментария
62

Из sbt версии 0.13.5 вы можете добавить в свой файл build.sbt

cancelable in Global := true

Он определяется как "Включает (true) или отключает (false) возможность прерывать выполнение задачи с помощью CTRL + C". в Определение ключей

Сообщается о некоторых ошибках:

3

Я нашел следующее полезным, когда у меня есть контроль над основным циклом запуска приложения из sbt.

Я говорю sbt для fork при запуске приложения (в 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 и shutdown, а не только основной поток.

Наконец, запустите sbt, возможно, переключитесь на подпроект, который вы хотите запустить, запустите.

Теперь, когда вы хотите остановить процесс, закройте его stdin, набрав CTRL-D в оболочке sbt.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню