Giết một tiến trình với một dòng lệnh Lệnh cụ thể của người Viking từ dòng lệnh


24

Có tiện ích dòng lệnh nào giết chết tất cả các quy trình với một dòng lệnh cụ thể không?

Ví dụ: giết tất cả các quy trình có tên "java.exe" bằng một dòng lệnh có chứa "-jar selenium-server.jar". Điều này có thể thông qua quá trình thám hiểm.


3
Tôi tin rằng cả hai câu trả lời dưới đây đều sai, vì bạn không hỏi cách giết quy trình .exe, bạn đang hỏi cách giết quy trình .exe có chứa một dòng lệnh cụ thể
admintech

2
Bạn chỉ nói về Windows? Các ví dụ của bạn và các câu trả lời được cung cấp làm cho nó có vẻ giống như bạn, nhưng bạn đã không chỉ định điều này.
Nathan Fellman

Bạn có thể giải thích "làm thế nào điều này có thể thông qua Process Explorer?" Tôi vừa ra mắt java - jar <app-name> và nó chỉ hiển thị java.exe
Sathyajith Bhat

tôi cá là anh ấy / cô ấy có nghĩa là "nhà thám hiểm quá trình hệ thống"
akira

Tất nhiên, Sysiternals Process Explorer, tất nhiên. Bạn có thể xem nhiều thông tin về việc chạy các quy trình từ nó, bao gồm cả dòng lệnh của chúng.
ripper234

Câu trả lời:


34

Trong Windows XP, bạn có thể thực hiện điều này một cách dễ dàng với WMIC, Bảng điều khiển WMI . Từ một propt lệnh, gõ như sau:

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

Chỉnh sửa:

Tôi đã thay thế bí danh ' process ' bằng đường dẫn đầy đủ (' path win32_ process ') như cổng Aviator. Bí danh này có thể không được khai báo trên mọi HĐH.


1
+20 Vậy đó! Chết tiệt :) Tôi cũng đang theo WMIC. Nhưng tôi đã làm điều đó từ trong bảng điều khiển WMIC và không thể áp dụng THÍCH. Đã nhận được lỗi cú pháp, điều này buộc tôi phải sử dụng '=', điều này buộc tôi phải nhập toàn bộ trường CommandLine. Vui mừng khi biết THÍCH hoạt động bên ngoài bảng điều khiển WMIC. Nên đã nghĩ về điều đó. Kudos cho bạn
Một người lùn

hoạt động hoàn hảo khi tôi gọi nó từ dòng lệnh. Tôi có TeamCity bắt đầu một quá trình mà tôi cần phải giết ở cuối bản dựng. Bằng cách nào đó khi cùng một dòng lệnh được gọi bởi TeamCity, nó sẽ trả về "Không có trường hợp có sẵn", cùng một dấu phẩy như được sao chép / dán vào cmd sẽ giết quá trình một cách chính xác. Bất kỳ ý tưởng tại sao sẽ được?
root

3
Chỉ cần một mẹo nhỏ cho các tệp cmd - để sử dụng lệnh này từ tệp cmd, bạn nên thay thế thoát tất cả các ký tự '%' bằng ký tự '%' thứ hai, ví dụ ... CommandLIne Giống như '%% - jar ...
sarh

8

Nếu bạn đang sử dụng phiên bản Windows có lệnh WMIC. Bạn có thể thử cái này

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

Dòng này more +1loại bỏ dòng đầu tiên chứa tiêu đề và chỉ in một mình PID. Nếu có nhiều hơn một quy trình java có chứa selenium.jar thì điều này sẽ trả về một PID trên mỗi dòng.


3

Tôi tin rằng bạn có thể làm điều này với PowerShell bằng cách sử dụng Get-Process và StartInfo.Argument về quy trình bạn muốn.

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

(Tôi chưa kiểm tra hoàn toàn điều đó, nhưng bạn sẽ có thể điều chỉnh nó để làm cho nó hoạt động)


Tôi đã thử nó với notepad, nhưng startinfo.argument trống.
js2010

3

Một lớp lót đơn giản trong powershell:

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

Thỉnh thoảng tôi nên học PS.
ripper234

2

Quyền hạn: -

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

1

Tôi sử dụng một biến thể của tập lệnh PowerShell của Brain .

Điều này xuất ra dòng lệnh và thông tin khác là tốt.

$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

Một biến thể quyền hạn khác. Về cơ bản là giống nhau, có lẽ dễ gõ và nhớ hơn. -match thực sự có thể có một biểu thức thông thường.

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

Bạn có thể giải thích sự khác biệt giữa lệnh PS của bạn và những người khác ở đây không?
Burgi

Về cơ bản là giống nhau. Có lẽ dễ dàng hơn để gõ và nhớ. -match thực sự có thể có một biểu thức thông thường.
js2010

Bạn nên chỉnh sửa câu trả lời của mình để đưa vào đó ...
Burgi

-2

Sử dụng PsKill miễn phí :

pskill java.exe


1
bạn đã bỏ lỡ phần thứ 2 của câu hỏi: "dòng lệnh cụ thể" ... không phải là java.exe đầu tiên, đi kèm .. không phải tất cả các quy trình java.exe
akira
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.