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.


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.


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.


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)


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()

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}}

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))..."
    }
}

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

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


1
Anda melewatkan bagian 2 dari pertanyaan: "commandline tertentu" ... bukan java.exe pertama, yang datang bersama .. tidak semua proses java.exe
akira
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.