Убийте процес із певного командного рядка з командного рядка


24

Чи є утиліта командного рядка, яка вбиває всі процеси за допомогою певного командного рядка?

Наприклад, знищити всі процеси з назвою "java.exe" командним рядком, що містить "-jar selenium-server.jar". Це можливо за допомогою провідника процесів.


3
Я вважаю, що обидві відповіді нижче неправильні, оскільки ви просто не запитуєте, як вбити процес .exe, ви запитуєте, як вбити процес .exe, який містить певний командний рядок
admintech

2
Ви говорите лише про Windows? Ваші приклади та надані відповіді здаються, що ви є, але ви цього не вказали.
Натан Фелман

Чи можете ви пояснити, "як це можливо через провідник процесів?" Я щойно запустив java - jar <app-name>, і він показує лише
java.exe

я впевнений , що він / вона мала в увазі «Sysinternals Process Explorer»
Акіра

Sysinternals Process Explorer, звичайно. Ви можете переглянути багато інформації про запущені процеси з нього, включаючи їх командний рядок.
ripper234

Відповіді:


34

У Windows XP ви можете це легко виконати, використовуючи WMIC, консоль WMI . У командному рядку введіть таке:

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

Редагувати:

Я замінив псевдонім ' process ' на його повний шлях (' path win32_process '), як і порт Aviator. Цей псевдонім може бути оголошений не в усіх ОС.


1
+20 Це все! Чорт: :) Я теж слідкував за WMIC. Але я робив це з консолі WMIC і не міг застосувати LIKE. Отримував синтаксичні помилки, які змушували мене використовувати '=', що в свою чергу змусило мене ввести все поле CommandLine. Радий знати, що LIKE працює поза консоллю WMIC. Треба було подумати про це. Кудо вам
Гном

прекрасно працює, коли я викликаю його з командного рядка. У мене TeamCity запускає процес, який мені потрібно вбити в кінці збірки. Так чи інакше, коли той самий командний рядок, який викликається TeamCity, він повертає "Жодних інстанцій (ів) недоступно", той самий кодекс, як скопійований / вставлений в cmd, вбиває процес правильно. Будь-які ідеї, чому це було б?
корінь

3
Ще трохи підказки для cmd-файлів - щоб використовувати цю команду з cmd-файлу, ви повинні замінити всі символи '%' на другу символу '%', наприклад ... CommandLIne Like '%% - 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 в поодинці. Якщо існує більше одного Java-процесу, що містить selenium.jar, це поверне один PID на рядок.


3

Я вважаю, що ви могли б зробити це за допомогою PowerShell за допомогою Get-Process та StartInfo.Аргументи на потрібному процесі.

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

(Я не перевіряв це повністю, але ви повинні мати змогу налаштувати його, щоб він працював)


Я спробував це з блокнотом, але аргументи startinfo.arument були порожніми.
js2010

3

Простий однолінійний корпус:

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

Мені справді слід навчитися PS колись.
ripper234


1

Я використовую варіацію сценарію PowerShell Brain .

Це також видає командний рядок та іншу інформацію.

$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

Ще одна варіація оболонки. Це в основному те саме, можливо простіше набрати та запам'ятати. -match може насправді приймати регулярний вираз.

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

Чи можете ви пояснити різницю між вашою командою PS та іншими тут?
Бургі

Це в основному те саме. Можливо, простіше набрати та запам'ятати. -match може насправді приймати регулярний вираз.
js2010

Ви повинні відредагувати свою відповідь, щоб включити це ...
Бургі,

-2

Використовуйте безкоштовний PsKill :

pskill java.exe


1
ви пропустили 2-ю частину запитання: "конкретний командний рядок" ... не перший java.exe, який йде разом .. ні всі процеси java.exe
akira
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.