32

Is there a command line utility that kills all processes with a specific command line?

E.g. kill all processes named "java.exe" with a command line that contains "-jar selenium-server.jar". This is possible through process explorer.

6
  • 3
    I believe both the answers below are wrong, as you arent just asking how to kill a .exe process, you are asking how to kill a .exe process which contains a specific command line
    – admintech
    Oct 7, 2009 at 10:45
  • 2
    Are you only talking about Windows? Your examples and the supplied answers make it seem like you are, but you didn't specify this. Oct 7, 2009 at 10:45
  • Can you explain "how this is possible through Process Explorer?" I just launched a java - jar<app-name> and it shows only java.exe
    – Sathyajith Bhat
    Oct 7, 2009 at 12:00
  • i bet he/she meant "sysinternals process explorer"
    – akira
    Oct 7, 2009 at 12:35
  • Sysinternals Process Explorer, of course. You can view much information about running processes from it, including their command line.
    – ripper234
    Oct 7, 2009 at 14:22

8 Answers 8

39

In Windows XP you can do this easily using WMIC, the WMI Console. From a command prompt, type the following:

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

Edit:

I replaced the alias 'process' by it full path ('path win32_process') as is Aviator's port. Note: This alias may not be declared on every OS.

3
  • 1
    +20 That's it! Dammit :) I too was following the WMIC. But I was doing it from within the WMIC console and wasn't being able to apply LIKE. Was getting syntax errors, which were forcing me to use '=', which in turn forced me to input the whole CommandLine field. Glad to know LIKE works outside the WMIC console. Should have thought of that. Kudos to you
    – A Dwarf
    Oct 7, 2009 at 13:04
  • works perfectly when I call it from command line. I have TeamCity starting a process which I need to kill at the end of the build. Somehow when the same command line called by TeamCity it returns "No Instance(s) Available", the same commad like copied/pasted to cmd kills the process correctly. Any ideas why would that be?
    – root
    Jun 6, 2014 at 14:00
  • 3
    Just a little tip for cmd files - to use this command from cmd file you should replace escape all '%' chars with a second '%' char, e.g. ... CommandLIne Like '%%-jar ...
    – sarh
    Nov 19, 2014 at 16:12
9

If you are using a Windows version which has WMIC command in it. You can try this

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

The more +1 removes first line containing the header and prints the PID alone. If there are more than one java process containing selenium.jar then this will return one PID per line.

5

Simple one-liner in powershell:

(Get-WmiObject win32_process -filter "Name='java.exe' AND CommandLine LIKE '%-jar selenium-server.jar%'").Terminate()
1
  • I should really learn PS sometime.
    – ripper234
    Jan 16, 2017 at 22:46
3

I believe you could do this with PowerShell using Get-Process and the StartInfo.Arguments on the process you want.

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

(I haven't tested that completely, but you should be able to tweak it to make it work)

1
  • 1
    I tried it with notepad, but the startinfo.arguments were blank.
    – js2010
    Jan 31, 2019 at 17:18
2

Powershell:-

$oProcs = get-process explorer;foreach ($oProc in $oProcs){if ($oProc.Path.Contains('C:\Windows')) {Stop-Process $oProc.Id}}
1

I use a variation of Brien's PowerShell script.

This outputs command line and other info as well.

$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

Another powershell variation. It's basically the same, perhaps easier to type and remember. -match can actually take a regular expression.

get-wmiobject win32_process | where commandline -match selenium-server.jar 
  | remove-wmiobject
3
  • Could you explain the difference between your PS command and the others here?
    – Burgi
    Feb 1, 2019 at 16:27
  • It's basically the same. Perhaps easier to type and remember. -match can actually take a regular expression.
    – js2010
    Feb 1, 2019 at 16:32
  • You should edit your answer to include that...
    – Burgi
    Feb 1, 2019 at 16:43
-2

Use the free PsKill:

pskill java.exe

1
  • 1
    you missed the 2nd part of the question: "specific commandline"... not the first java.exe, that comes along .. neither all java.exe processes
    – akira
    Oct 7, 2009 at 11:33

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.