进程挂起,无法在Powershell中停止进程或终止

时间:2019-04-06 01:01:11

标签: r powershell cmd rstudio

我是Powershell和CMD脚本的新手,希望您能为您提供帮助。我正在R中运行代码,其中包括使用shell命令运行批处理文件,该批处理文件在另一个程序Quest Analytics中打开并运行一个进程。我注意到这在我的任务管理器中启动了一个名为“ QuestConsole.exe”的进程。 Quest做一些事情,然后将文件保存到我的C驱动器中并应该关闭。但是,它并不总是关闭,并且与内存使用情况保持联系,显示没有变化。在我实际上迫使任务管理器中关闭该过程之前,R不会从我的其余代码开始。我以这种方式关闭它没有问题,然后R在没有问题的情况下拾取它。我将其设计为通过一个闪亮的应用程序自动运行,因此每次挂断时将无法使用任务管理器将其关闭。因此,我决定尝试构建一个Powershell脚本,该脚本在后台连续运行,并且如果QuestConsole.exe进程已激活6分钟以上,则将其杀死。

我在Powershell中尝试了两种不同的方法:

(Get-WmiObject win32_process -Filter “name = ‘QuestConsole.exe’”).Terminate()

Stop-Process -Name QuestConsole

这些都不起作用。没有错误。 Powershell的运行看起来一切都很好,但是QuestConsole.exe进程仍在任务管理器中(在嘲笑我!)。

我能够将其用于CMD:

Wmic process where name=”QuestConsole.exe” call terminate

我更喜欢使用Powershell,因为我已经编写了脚本并且学习过程很痛苦。有谁知道在PowerShell中杀死我的进程的其他方法吗?也许等效于我在CMD中使用的命令?另外,我将包括Powershell脚本,以防万一可以帮助我用CMD重写它。

While ($True) {
$startTimeLimit = (Get-Date) - (New-TimeSpan -minutes 6)
$questStart = (Get-Process QuestConsole).StartTime
$eval = $questStart -gt $startTimeLimit
if ($eval -eq $false)
{
    Stop-Process -Name QuestConsole
}
}

1 个答案:

答案 0 :(得分:0)

没有充分的理由说明Stop-Process -Name QuestConsole不起作用。

从实用的角度讲,如果wmic.exe命令对您有用,则只需从PowerShell调用它即可。

此外,您不应该在紧缩的循环中运行监视脚本-两次检查之间不睡觉;因此:

While ($True) {
  if (((Get-Date) - (Get-Process QuestConsole).StartTime).TotalMinutes -ge 6 {
     wmic process where 'name="QuestConsole.exe"' call terminate
  }
  Start-Sleep -Seconds 1
}

请注意简化的条件和'...'过滤器参数周围的wmic,以确保"字符。通过。