web-dev-qa-db-fra.com

Tuer un processus avec une "ligne de commande" spécifique à partir de la ligne de commande

Existe-t-il un utilitaire de ligne de commande qui tue tous les processus avec une ligne de commande spécifique?

Par exemple. Éliminez tous les processus nommés "Java.exe" avec une ligne de commande contenant "-jar Selenium-server.jar". Ceci est possible grâce à l'explorateur de processus.

23
ripper234

Sous Windows XP, vous pouvez le faire facilement en utilisant WMIC, la console WMI . A partir d'une commande propt, tapez ce qui suit:

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

Modifier:

J'ai remplacé le processus alias '' par son chemin complet (' chemin win32_process ') comme c'est le port de l'aviateur. Cet alias ne peut pas être déclaré sur tous les systèmes d'exploitation.

33
Benoit

Si vous utilisez une version Windows comportant une commande WMIC. Tu peux essayer ça

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

Le more +1 supprime la première ligne contenant l'en-tête et imprime le PID seul. S'il y a plus d'un processus Java contenant Selenium.jar, cela retournera un PID par ligne.

8
vpram86

Je pense que vous pouvez le faire avec PowerShell en utilisant Get-Process et StartInfo.Arguments sur le processus souhaité.

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

(Je n'ai pas testé cela complètement, mais vous devriez pouvoir le modifier pour le faire fonctionner)

3
brien

Un one-liner simple dans powershell:

(Get-WmiObject win32_process -filter "Name='Java.exe' AND CommandLine LIKE '%-jar Selenium-server.jar%'").Terminate()
3
wisbucky

Powershell: -

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

J'utilise une variante de script PowerShell de Brain .

Cela affiche également la ligne de commande et d’autres informations.

$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
Jan H

Une autre variation de PowerShell. C'est fondamentalement la même chose, peut-être plus facile à taper et à retenir. -match peut réellement prendre une expression régulière.

get-wmiobject win32_process | where commandline -match Selenium-server.jar 
  | remove-wmiobject
0
js2010