SBTは終了せずに実行を停止します


120

終了せずにSBTの実行をどのように終了しますか?

CTRL + Cを試行していますが、SBTを終了します。SBTを開いたまま、実行中のアプリケーションのみを終了する方法はありますか?


Ctrl+D動作しません。
ボッチャニアク

Ctrl + DPlayフレームワークでのみ機能すると思います。
EnverOsmanov 2016年

回答:


44

デフォルトの構成では、実行はsbtが実行されているのと同じJVMで行われるため、簡単に個別に強制終了することはできません。

Forkingで説明されているように、別のフォークされたJVMで実行すると、sbtのJVMに影響を与えることなく、そのJVMを(オペレーティングシステムが提供する手段で)強制終了できます。

fork in run := true

9
私はこれをやろうとしている。具体的には、stackoverflow.com / questions / 3868863 / …を実装しましたが、CTRL + Cを実行してもsbtは終了します。フォークされたJVMだけを強制終了するにはどうすればよいですか?
dsg 2011年

2
killコマンドラインから、またはタスクマネージャで(Windowsの場合)、または強制終了またはなどアクティビティモニタする(Mac OS X)は、
セス・Tisue

SBT以外のすべてのJavaを殺すために、フォークした後、実行:kill -9 `ps -h | grep java | grep -v sbt-launch | grep -v grep | awk '{print $1}'`
DSG

1
このアイデアは大好きですが、役に立たないようです。私は0.13.1 SBT実行していると私のbuild.sbtファイルに次の行を追加している...
doub1ejack

runCTRL + Dで殺す必要がある
Timofey 2015

82

sbtバージョン0.13.5からbuild.sbtに追加できます

cancelable in Global := true

「CTRL + Cでタスクの実行を中断する機能を有効(true)または無効(false)」に定義されています。でキーの定義

Scala 2.12.7+を使用している場合は、CTRL + Cでコンパイルをキャンセルすることもできます。リファレンスhttps://github.com/scala/scala/pull/6479

いくつかのバグが報告されています:


5

sbtから実行されているアプリケーションのメインループを制御している場合、次の情報が役に立ちました。

(build.sbtで)アプリケーションを実行するときにフォークするようにsbtに指示します:

fork in run := true

また、標準入力をsbtシェルからアプリケーション(build.sbt内)に転送するように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を起動し、オプションで実行したいサブプロジェクトに切り替え、実行します。

ここで、プロセスを停止する場合は、sbtシェルでCTRL-Dを入力して、そのstdinを閉じます。


1

sbt-revolverの使用を検討してください。社内で使用しており、重宝しています。あなたが求めていることのために次のことを行うことができます:

reStart

reStop

build.sbtファイルを構成する必要はありません。

以下を追加することで、このプラグインを使用できます。

addSbtPlugin("io.spray" % "sbt-revolver" % "0.9.1")

あなたのプロジェクト/plugins.sbtに

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.