Beenden Sie einen Prozess mit einer bestimmten "Befehlszeile" von der Befehlszeile aus

42232
ripper234

Gibt es ein Befehlszeilenprogramm, das alle Prozesse mit einer bestimmten Befehlszeile beendet?

Beenden Sie beispielsweise alle Prozesse mit dem Namen "java.exe" mit einer Befehlszeile, die "-jar selenium-server.jar" enthält. Dies ist über den Process Explorer möglich.

22
Ich glaube, dass die beiden folgenden Antworten falsch sind, da Sie nicht gefragt werden, wie Sie einen .exe-Prozess beenden, und Sie fragen, wie Sie einen .exe-Prozess beenden, der eine bestimmte Befehlszeile enthält admintech vor 15 Jahren 3
Sprichst du nur über Windows? Ihre Beispiele und die bereitgestellten Antworten lassen es so erscheinen, als ob Sie es wären, aber Sie haben dies nicht angegeben. Nathan Fellman vor 15 Jahren 2
Können Sie erklären, "wie dies durch Process Explorer möglich ist?" Ich habe gerade ein Java - Glas gestartet und es zeigt nur java.exe Sathya vor 15 Jahren 0
ich wette, er / sie meinte "sysinternals process explorer" akira vor 15 Jahren 0
Sysinternals Process Explorer natürlich. Sie können viele Informationen zu laufenden Prozessen anzeigen, einschließlich der Befehlszeile. ripper234 vor 15 Jahren 0
Ich bezog mich auch auf den Prozessexplorer von Sysinternals Sathya vor 15 Jahren 0

7 Antworten auf die Frage

31
Benoit

In Windows XP können Sie dazu einfach die WMI- Konsole von WMIC verwenden . Geben Sie in einem Befehlsprot Folgendes ein:

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

Bearbeiten:

Ich habe den Alias ​​' process ' durch den vollständigen Pfad (' path win32_process ') ersetzt, ebenso wie der Port von Aviator. Dieser Alias ​​darf nicht in jedem Betriebssystem deklariert werden.

+20 Das ist es! Dammit :) Auch ich habe die WMIC verfolgt. Aber ich habe es von der WMIC-Konsole aus gemacht und konnte LIKE nicht anwenden. Ich bekam Syntaxfehler, die mich zwangen, '=' zu verwenden, was mich wiederum dazu zwang, das gesamte Feld CommandLine einzugeben. Schön, dass LIKE außerhalb der WMIC-Konsole funktioniert. Sollte daran gedacht haben. Hut ab A Dwarf vor 15 Jahren 1
funktioniert perfekt, wenn ich es von der Kommandozeile aus anrufe. Ich habe TeamCity, der einen Prozess startet, den ich am Ende des Builds beenden muss. Wenn dieselbe Befehlszeile, die von TeamCity aufgerufen wird, "Keine Instanz (en) verfügbar" zurückgibt, wird der Prozess durch die gleiche Kommandozeile, die in cmd kopiert / eingefügt wurde, irgendwie beendet. Irgendwelche Ideen, warum das so wäre? root vor 10 Jahren 0
Nur ein kleiner Tipp für cmd-Dateien. Um diesen Befehl aus der cmd-Datei zu verwenden, sollten Sie alle '%' - Zeichen durch ein zweites '%' - Zeichen ersetzen, z. B. ... CommandLIne Like '%% - jar ... sarh vor 10 Jahren 3
8
vpram86

Wenn Sie eine Windows-Version verwenden, die den Befehl WMIC enthält. Sie können es versuchen

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

Die more +1erste Zeile mit der Kopfzeile wird entfernt und die PID wird allein gedruckt. Wenn es mehr als einen Java-Prozess gibt, der selenium.jar enthält, wird eine PID pro Zeile zurückgegeben.

3
brien

Ich glaube, Sie könnten dies mit PowerShell unter Verwendung von Get-Process und den StartInfo.Arguments für den gewünschten Prozess tun.

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

(Ich habe das nicht vollständig getestet, aber Sie sollten in der Lage sein, es zu optimieren, damit es funktioniert.)

3
wisbucky

Einfaches Liner in Powershell:

(Get-WmiObject win32_process -filter "Name='java.exe' AND CommandLine LIKE '%-jar selenium-server.jar%'").Terminate() 
Ich sollte PS irgendwann wirklich lernen. ripper234 vor 7 Jahren 0
2
Richard Forrester

Power Shell:-

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

Ich verwende eine Variante des Brains PowerShell-Skripts .

Dies gibt auch die Befehlszeile und andere Informationen aus.

$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

Sie haben den zweiten Teil der Frage verpasst: "spezifische Befehlszeile" ... nicht die erste java.exe, die mitkommt .. weder alle java.exe-Prozesse akira vor 15 Jahren 1