24

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.

  • 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 '09 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. – Nathan Fellman Oct 7 '09 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 '09 at 12:00
  • i bet he/she meant "sysinternals process explorer" – akira Oct 7 '09 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 '09 at 14:22
34

In Windows XP, you can do this easyly uing WMIC, the WMI Console. From a command propt, 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. This alias may not be declared on every OS.

  • 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 '09 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 '14 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 '14 at 16:12
8

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.

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)

  • I tried it with notepad, but the startinfo.arguments were blank. – js2010 Jan 31 '19 at 17:18
3

Simple one-liner in powershell:

(Get-WmiObject win32_process -filter "Name='java.exe' AND CommandLine LIKE '%-jar selenium-server.jar%'").Terminate()
  • I should really learn PS sometime. – ripper234 Jan 16 '17 at 22:46
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 Brain'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
  • Could you explain the difference between your PS command and the others here? – Burgi Feb 1 '19 at 16:27
  • It's basically the same. Perhaps easier to type and remember. -match can actually take a regular expression. – js2010 Feb 1 '19 at 16:32
  • You should edit your answer to include that... – Burgi Feb 1 '19 at 16:43
-2

Use the free PsKill:

pskill java.exe

  • 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 '09 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.