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.
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.
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.
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)
Un one-liner simple dans powershell:
(Get-WmiObject win32_process -filter "Name='Java.exe' AND CommandLine LIKE '%-jar Selenium-server.jar%'").Terminate()
Powershell: -
$oProcs = get-process Explorer;foreach ($oProc in $oProcs){if ($oProc.Path.Contains('C:\Windows')) {Stop-Process $oProc.Id}}
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))..."
}
}
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