【问题标题】:Kill sbt in windows powershell在 windows powershell 中杀死 sbt
【发布时间】:2014-02-06 23:30:30
【问题描述】:

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

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

我还尝试了ctrl+zctrl+d 和其他一些似乎没有多大作用的其他方法。我猜这更像是一个不通过信号的powershell问题,但我不太确定。

【问题讨论】:

  • 你是如何从 Powershell 启动它的?
  • 在这种情况下,任务管理器的一个更好的替代方案是进程资源管理器:technet.microsoft.com/en-us/sysinternals/bb896653.aspx 使用它你可以看到进程的完整命令行。
  • 为什么我们找不到 sbt.exe 或其他任何东西并通过 $PID 停止它? Get-Process sbt | ForEach-Object -Process {Stop-Process -Id $_.ID}告诉我我们正在谈论的可执行文件的名称。

标签: powershell sbt


【解决方案1】:

您使用的是哪个版本的 Powershell?对我来说,Ctrl+C 在运行 sbt 时会导致提示 Terminate batch job (Y/N)? 在我输入 Y 时终止 sbt。这适用于标准终端和 ConEmu,所以奇怪的是它不适合您。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-24
    • 2019-07-09
    • 2014-10-22
    • 1970-01-01
    • 1970-01-01
    • 2012-06-13
    • 1970-01-01
    • 2012-06-08
    相关资源
    最近更新 更多