在windows powershell中杀死sbt

在windows powershell中杀死sbt,powershell,sbt,Powershell,Sbt,我正在Windows上使用powershell运行sbt。我想找出杀死sbt的最好方法。我想这样做的一个例子是,如果我忘记设置代理设置。如果我忘记设置它们,在试图解决每个依赖项时,sbt通常会挂起30秒或更长时间。如果存在大量依赖项,则需要一段时间等待它们全部失败 如果这是cygwin或bash,我很确定ctrl+c会起作用,但在powershell中似乎没有效果。我还尝试了ctrl+break,它似乎给出了一个线程转储,但没有停止进程。我可以去任务管理器那里搜索进程并终止它,但我希望有一个更简

我正在Windows上使用
powershell
运行
sbt
。我想找出杀死sbt的最好方法。我想这样做的一个例子是,如果我忘记设置代理设置。如果我忘记设置它们,在试图解决每个依赖项时,sbt通常会挂起30秒或更长时间。如果存在大量依赖项,则需要一段时间等待它们全部失败

如果这是
cygwin
bash
,我很确定
ctrl+c
会起作用,但在powershell中似乎没有效果。我还尝试了
ctrl+break
,它似乎给出了一个线程转储,但没有停止进程。我可以去任务管理器那里搜索进程并终止它,但我希望有一个更简单的方法,而且我应该从任务管理器终止哪个进程并不总是很明显


我也尝试过
ctrl+z
ctrl+d
和其他一些似乎没什么作用的方法。我猜这更像是powershell的问题,没有通过信号,但我不太确定。

您使用的powershell版本是什么?对我来说,运行sbt时,
Ctrl+C
导致出现提示
终止批处理作业(Y/N)
,当我输入
Y
时,该提示终止了sbt。这对标准终端和ConEmu都有效,所以奇怪的是它不适用于您

运行sbt不会导致名为
sbt
的进程,而是名为
java
的进程,因为scala在JVM下运行。因此,您必须检查进程的命令行参数,以查看它是否为sbt。您可以将命令行属性添加到Get进程的结果中:

Update-TypeData -TypeName System.Diagnostics.Process -MemberName CommandLine -MemberType ScriptProperty -ea silent -Value { $id = $this.Id; $result = Get-WmiObject win32_process -Filter "ProcessId = $id"; $result.CommandLine };
…这将允许您在不同的Powershell窗口中输入以下内容以终止sbt:

ps java | ? commandline -m "sbt" | kill

或者,您可以从不同的终端(如ConEmu(我的最爱)或Console2)中使用Powershell,这使您可以选择在任何给定的终端窗口/选项卡中终止当前正在运行的进程。

您如何从Powershell启动它?在这种情况下,任务管理器的更好替代方法是process Explorer:使用它,您可以看到进程的完整命令行。为什么我们不能找到sbt.exe或其他文件并通过$PID停止它
Get Process sbt | ForEach Object-Process{Stop Process-Id$\uu.Id}
告诉我我们正在讨论的可执行文件的名称。