Matikan proses dengan "Command Line" tertentu dari command line

23

Apakah ada utilitas baris perintah yang membunuh semua proses dengan baris perintah tertentu?

Misalnya, bunuh semua proses yang disebut "java.exe" dengan baris perintah yang berisi "-jar selenium-server.jar". Ini dimungkinkan melalui proses explorer.

ripper234
sumber
3
Saya percaya kedua jawaban di bawah ini salah, karena Anda arent hanya bertanya bagaimana untuk membunuh proses .exe, Anda bertanya bagaimana untuk membunuh proses exe yang berisi baris perintah tertentu
admintech
2
Apakah Anda hanya berbicara tentang Windows? Contoh Anda dan jawaban yang diberikan membuatnya tampak seperti Anda, tetapi Anda tidak menentukan ini.
Nathan Fellman
Bisakah Anda menjelaskan "bagaimana ini dimungkinkan melalui Process Explorer?" Saya baru saja meluncurkan java - toples <app-name> dan hanya menunjukkan java.exe
Sathyajith Bhat
Saya yakin dia berarti "sysinternals process explorer"
akira
Sysinternals Process Explorer, tentu saja. Anda dapat melihat banyak informasi tentang proses yang sedang berjalan darinya, termasuk baris perintah mereka.
ripper234

Jawaban:

34

Di Windows XP, Anda dapat melakukannya dengan mudah menggunakan WMIC, Konsol WMI . Dari propt perintah, ketikkan yang berikut ini:

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

Sunting:

Saya mengganti alias ' proses ' dengan path lengkap (' path win32_process ') seperti port Aviator. Alias ​​ini tidak boleh dideklarasikan di setiap OS.

Benoit
sumber
1
+20 Itu dia! Sialan :) Saya juga mengikuti WMIC. Tapi saya melakukannya dari dalam konsol WMIC dan tidak bisa menerapkan LIKE. Semakin banyak kesalahan sintaks, yang memaksa saya untuk menggunakan '=', yang pada gilirannya memaksa saya untuk memasukkan seluruh bidang CommandLine. Senang mengetahui SUKA bekerja di luar konsol WMIC. Seharusnya memikirkan itu. Kudos to you
A Dwarf
berfungsi dengan baik ketika saya memanggilnya dari baris perintah. Saya meminta TeamCity memulai proses yang harus saya bunuh pada akhir build. Entah bagaimana ketika baris perintah yang sama dipanggil oleh TeamCity ia mengembalikan "No Instance (s) Available", komad yang sama seperti disalin / disisipkan ke cmd membunuh proses dengan benar. Adakah ide mengapa hal itu terjadi?
root
3
Hanya sedikit tip untuk file cmd - untuk menggunakan perintah ini dari file cmd Anda harus mengganti escape semua karakter '%' dengan karakter '%' kedua, misalnya ... CommandLIne Like '%% - jar ...
sarh
8

Jika Anda menggunakan versi Windows yang memiliki perintah WMIC di dalamnya. Anda bisa mencoba ini

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

The more +1menghilangkan baris pertama berisi header dan mencetak PID saja. Jika ada lebih dari satu proses java yang mengandung selenium.jar maka ini akan mengembalikan satu PID per baris.

vpram86
sumber
3

Saya percaya Anda bisa melakukan ini dengan PowerShell menggunakan Get-Process dan StartInfo.Arguments pada proses yang Anda inginkan.

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

(Saya belum menguji sepenuhnya, tetapi Anda harus dapat men-tweak untuk membuatnya berfungsi)

Brien
sumber
Saya mencobanya dengan notepad, tetapi dokumen startinfo.argumen kosong.
js2010
3

Satu kalimat sederhana di PowerShell:

(Get-WmiObject win32_process -filter "Name='java.exe' AND CommandLine LIKE '%-jar selenium-server.jar%'").Terminate()
wisbucky
sumber
Saya harus benar-benar belajar PS kapan-kapan.
ripper234
2

Powershell: -

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

Saya menggunakan variasi skrip PowerShell dari Brain .

Ini menampilkan baris perintah dan info lainnya juga.

$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))..."
    }
}
Jan H
sumber
0

Variasi kekuatan lainnya. Pada dasarnya sama, mungkin lebih mudah untuk mengetik dan mengingat. -match benar-benar dapat mengambil ekspresi reguler.

get-wmiobject win32_process | where commandline -match selenium-server.jar 
  | remove-wmiobject
js2010
sumber
Bisakah Anda menjelaskan perbedaan antara perintah PS Anda dan yang lainnya di sini?
Burgi
Pada dasarnya sama. Mungkin lebih mudah untuk mengetik dan mengingat. -match benar-benar dapat mengambil ekspresi reguler.
js2010
Anda harus mengedit jawaban Anda untuk memasukkan itu ...
Burgi
-2

Gunakan PsKill gratis :

pskill java.exe

harrymc
sumber
1
Anda melewatkan bagian 2 dari pertanyaan: "commandline tertentu" ... bukan java.exe pertama, yang datang bersama .. tidak semua proses java.exe
akira