Убить процесс с помощью определенной «командной строки» из командной строки

41813
ripper234

Есть ли утилита командной строки, которая убивает все процессы с определенной командной строкой?

Например, убить все процессы с именем «java.exe» с помощью командной строки, содержащей «-jar selenium-server.jar». Это возможно через Process Explorer.

22
Я считаю, что оба ответа ниже неправильны, так как вы не просто спрашиваете, как убить процесс .exe, вы спрашиваете, как убить процесс .exe, который содержит определенную командную строку admintech 14 лет назад 3
Вы говорите только о Windows? Ваши примеры и предоставленные ответы создают впечатление, что вы есть, но вы не указали это. Nathan Fellman 14 лет назад 2
Можете ли вы объяснить, "как это возможно через Process Explorer?" Я только что запустил java - jar и показывает только java.exe Sathya 14 лет назад 0
Бьюсь об заклад, он / она имел в виду "Sysinternals Process Explorer" akira 14 лет назад 0
Sysinternals Process Explorer, конечно. Из него можно просмотреть много информации о запущенных процессах, включая их командную строку. ripper234 14 лет назад 0
Я имел в виду проводника процессов Sysinternals, а также Sathya 14 лет назад 0

7 ответов на вопрос

31
Benoit

В Windows XP вы можете легко это сделать с помощью WMIC, консоли WMI . В командной строке введите следующее:

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

Редактировать:

Я заменил псевдоним ' process ' на полный путь (' путь win32_process '), как и порт Aviator. Этот псевдоним не может быть объявлен на каждой ОС.

+20 Вот и все! Черт побери :) Я тоже следил за WMIC. Но я делал это из консоли WMIC и не мог применить LIKE. Получал синтаксические ошибки, которые заставляли меня использовать '=', что, в свою очередь, заставляло меня вводить все поле CommandLine. Рад, что LIKE работает за пределами консоли WMIC. Надо было подумать об этом. Слава тебе A Dwarf 14 лет назад 1
отлично работает, когда я звоню из командной строки. У меня есть TeamCity, запускающий процесс, который мне нужно убить в конце сборки. Каким-то образом, когда та же командная строка, вызываемая TeamCity, возвращает «Нет доступных экземпляров», такая же запятая, как и в случае копирования / вставки в cmd, корректно завершает процесс. Есть идеи, почему это будет? root 9 лет назад 0
Небольшой совет для cmd-файлов - чтобы использовать эту команду из cmd-файла, вы должны заменить escape-символы "%" на второй символ "%", например ... CommandLIne Like "%% - jar ... sarh 9 лет назад 3
8
vpram86

Если вы используете версию Windows, в которой есть команда WMIC. Вы можете попробовать это

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

more +1Удаляет первую строку, содержащую заголовок и печатает PID в одиночку. Если существует более одного процесса Java, содержащего selenium.jar, то это будет возвращать один PID на строку.

3
brien

Я полагаю, что вы можете сделать это с PowerShell, используя Get-Process и StartInfo.Arguments для нужного вам процесса.

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

(Я не проверял это полностью, но вы должны иметь возможность настроить его, чтобы он работал)

3
wisbucky

Простой однострочник в powershell:

(Get-WmiObject win32_process -filter "Name='java.exe' AND CommandLine LIKE '%-jar selenium-server.jar%'").Terminate() 
Я должен действительно выучить PS когда-нибудь. ripper234 7 лет назад 0
2
Richard Forrester

Powershell: -

$oProcs = get-process explorer;foreach ($oProc in $oProcs)} 
1
Jan H

Я использую вариацию скрипта 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))..." } } 
-1
harrymc

PsKill :

pskill java.exe

вы пропустили 2-ю часть вопроса: «конкретная командная строка» ... не первый java.exe, который приходит вместе с ним ... ни все процессы java.exe akira 14 лет назад 1