実行可能パスを使用してWindowsで実行中のプロセスを強制終了するには、次のいずれかを使用できます。
wmic process where ExecutablePath='C:\\path\\to\\my.exe' delete
または:
wmic process where ExecutablePath='C:\\path\\to\\my.exe' call terminate
もしあれば、これら2つのアプローチの実際的な違いは何ですか?
call terminate
を使用すると、call terminate '-1073741510'
などの終了ステータスを渡すことができます。 32ビットのステータス値は署名する必要があり、負の値は引用符で囲む必要があります。後者の値は、符号付き10進値としてSTATUS_CONTROL_C_EXIT
(0xC000013A)です。デフォルトの終了ステータスは0です。これは、delete
動詞に使用される値と同じです。
実装に関しては、WMIサービスはWMIプロバイダーホスト(wmiprvse.exe)のインスタンスを開始して、要求を処理します。プロバイダーのホストプロセスが数分間再利用されるため、デバッガーを接続してこれを検査するのは比較的簡単です。 Win32_Process
クラスは、WMI Win32プロバイダーモジュール(cimwin32.dll)に実装されています。このモジュールには、Process
メソッドとDeleteInstance
メソッドを持つExecTerminate
クラスが含まれ、それぞれdelete
とcall terminate
に対して呼び出されます。どちらのメソッドも、最終的にWINAPITerminateProcess
を呼び出します。