特定のコマンドラインですべてのプロセスを強制終了するコマンドラインユーティリティはありますか?
例えば。 「-jar Selenium-server.jar」を含むコマンドラインを使用して、「Java.exe」という名前のすべてのプロセスを強制終了します。これは、Process Explorerを介して可能です。
Windows XPでは、WMICを使用してこれを簡単に行うことができます [〜#〜] wmi [〜#〜] コンソール。コマンドプロパティから、次のように入力します。
wmic Path win32_process Where "CommandLine Like '%-jar Selenium-server.jar%'" Call Terminate
編集:
エイリアス 'process'をフルパス( 'path win32_process ')アビエイターの移植と同様に。このエイリアスは、すべてのOSで宣言されているとは限りません。
WMICコマンドが含まれているWindowsバージョンを使用している場合。あなたはこれを試すことができます
wmic path win32_process Where "Caption Like '%Java.exe%' AND CommandLine Like '%Selenium.jar%'" get ProcessId|more +1
more +1
は、ヘッダーを含む最初の行を削除し、PIDのみを出力します。複数のJava Selenium.jarを含むプロセスがある場合、これは1行につき1つのPIDを返します。
Get-Processと必要なプロセスのStartInfo.Argumentsを使用して、PowerShellでこれを実行できると思います。
$procs = Get-Process Java
foreach($proc in $procs)
{
if($proc.StartInfo.Arguments -contains "-jar Selenium-server.jar")
{
kill $proc
}
}
(私は完全にはテストしていませんが、それを機能させるために微調整できるはずです)
PowerShellのシンプルなワンライナー:
(Get-WmiObject win32_process -filter "Name='Java.exe' AND CommandLine LIKE '%-jar Selenium-server.jar%'").Terminate()
パワーシェル:-
$oProcs = get-process Explorer;foreach ($oProc in $oProcs){if ($oProc.Path.Contains('C:\Windows')) {Stop-Process $oProc.Id}}
BrainのPowerShellスクリプト のバリエーションを使用します。
これはコマンドラインと他の情報も出力します。
$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))..."
}
}
別のpowershellバリエーション。基本的には同じですが、タイプして覚えるのはおそらく簡単です。 -matchは実際には正規表現を取ることができます。
get-wmiobject win32_process | where commandline -match Selenium-server.jar
| remove-wmiobject