从命令行使用特定的“命令行”杀死进程


24

是否有命令行实用程序可以杀死具有特定命令行的所有进程?

例如,使用包含“ -jar selenium-server.jar”的命令行杀死所有名为“ java.exe”的进程。通过流程浏览器可以做到这一点。


3
我相信以下两个答案都是错误的,因为您没有问过如何杀死一个.exe进程,而是询问如何杀死一个包含特定命令行的.exe进程
admintech

2
您只在谈论Windows吗?您的示例和提供的答案使您看起来像是,但是您没有指定它。
内森·费尔曼

您能否解释“如何通过Process Explorer做到这一点?” 我刚刚启动了一个Java-jar <app-name>,它仅显示java.exe
Sathyajith Bhat

我敢打赌,他/她的意思是“ sysinternals过程浏览器”
akira

当然,Sysinternals Process Explorer。您可以从中查看有关正在运行的进程的许多信息,包括命令行。
ripper234 2009年

Answers:


34

在Windows XP中,你可以做到这一点easyly uing WMIC的WMI控制台。在命令提示符中,键入以下内容:

wmic Path win32_process Where "CommandLine Like '%-jar selenium-server.jar%'" Call Terminate

编辑:

我将别名“ process ” 替换为完整路径(“ path win32_process ”),就像飞行员的端口一样。可能不是在每个操作系统上都声明此别名。


1
+20就是这样!该死的:)我也一直在关注WMIC。但是我是在WMIC控制台中执行此操作的,因此无法应用LIKE。遇到语法错误,这迫使我使用'=',这又迫使我输入整个CommandLine字段。很高兴知道LIKE在WMIC控制台之外工作。应该想到了。恭喜您
矮人'

当我从命令行调用它时,效果很好。我让TeamCity开始一个过程,我需要在构建结束时终止该过程。不知何故,当TeamCity调用的同一命令行返回“无可用实例”时,相同的逗号(例如复制/粘贴到cmd)会正确杀死该进程。任何想法为什么会这样?

3
关于cmd文件的一点提示-要使用cmd文件中的此命令,您应该将转义所有'%'字符替换为第二个'%'字符,例如... CommandLIne像'%%-jar ...
sarh

8

如果您使用的是Windows版本,其中包含WMIC命令。你可以试试这个

wmic path win32_process Where "Caption Like '%java.exe%' AND CommandLine Like '%selenium.jar%'" get ProcessId|more +1

所述more +1去除包含标题第一线路和单独打印PID。如果包含selenium.jar的java进程不止一个,则每行将返回一个PID。


3

我相信您可以使用PowerShell在所需的进程上使用Get-Process和StartInfo.Arguments来执行此操作。

$procs = Get-Process java
foreach($proc in $procs) 
{
    if($proc.StartInfo.Arguments -contains "-jar selenium-server.jar")
    {
        kill $proc
    }
}

(我尚未对它进行完整的测试,但是您应该可以对其进行调整以使其正常运行)


我用记事本尝试过,但是startinfo.arguments是空白的。
js2010

3

Powershell中的简单一线式:

(Get-WmiObject win32_process -filter "Name='java.exe' AND CommandLine LIKE '%-jar selenium-server.jar%'").Terminate()

我真的应该在某个时候学习PS。
ripper234 '17


1

我使用Brain的PowerShell脚本的变体。

这也会输出命令行和其他信息。

$processes = Get-WmiObject Win32_Process -Filter "name = 'java.exe'"
foreach($proc in $processes)
{
    if($proc.CommandLine.Contains("selenium-server.jar"))
    {
        Write-Host "stopping proccess $($proc.ProcessId) with $($proc.ThreadCount) threads; $($proc.CommandLine.Substring(0, 50))..."
        Stop-Process -F $proc.ProcessId
    } else
    {
        Write-Host "skipping proccess $($proc.ProcessId) with $($proc.ThreadCount) threads; $($proc.CommandLine.Substring(0, 50))..."
    }
}

0

另一个powershell变体。基本相同,也许更容易键入和记住。-match实际上可以采用正则表达式。

get-wmiobject win32_process | where commandline -match selenium-server.jar 
  | remove-wmiobject

您能否在这里解释您的PS命令与其他命令之间的区别?
Burgi

基本上是一样的。也许更容易键入和记住。-match实际上可以采用正则表达式。
js2010

您应该编辑答案以包括...
Burgi

-2

使用免费的PsKill

pskill java.exe


1
您错过了问题的第二部分:“特定命令行” ...不是第一个出现的java.exe,..并非所有java.exe进程
akira
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.