Taskkill.exe:プロセスが実行されていなくてもエラーをスローしない


33

コンパイル後にIISが実行されている場合、IISをシャットダウンするVisual Studioポストビルドイベントを実行しています。

taskkill /f /im w3wp.exe

以下は、IISがまだ実行されている場合は完全に機能しますが、既に停止している場合はエラーをスローします。

Error 1 The process "w3wp.exe" not found. xxx\EXEC

一致する実行中のプロセスが見つからない場合、taskkillに問題を無視するように指示する方法はありますか?

回答:


29

1つのコマンドを実行する代わりに、小さなバッチファイルを実行すると動作しますか?

tasklist /FI "IMAGENAME eq w3wp.exe" 2>NUL | find /I /N "w3wp.exe">NUL
if "%ERRORLEVEL%"=="0" taskkill /f /im w3wp.exe

22

私がこれを見つけた解決策は、実行することでした

START /wait taskkill /f /im w3wp.exe

STARTコマンドから成功を返し、TASKKILLによってスローされたエラーはすべて新しいコンソールウィンドウにスローされます。


5
バッチファイルを続行する前にタスクが強制終了されるのを待ちたい場合。単純に追加しますSTART /wait taskkill /f /im w3wp.exe
jezternz

1
待機は非常に重要な詳細です。混乱を避けるために、それを元の回答に編集します。ありがとう@jezternz!
ダスティンゲーマー

15

これもうまくいきます:

taskkill /IM "w3wp.exe" /F /FI "STATUS eq RUNNING"

これを機能させることができませんでした-taskkillの私のバージョンは「STATUS eq RUNNING」を認識しないようです。ただし、「MEMUSAGE gt 2」は機能します。
-Polyfun

「STATUS eq UNKNOWN」は、スタックしているかどうかに関係なくプロセスをキャッチするためのより良いオプションであることがわかりました(しかし、どちらにしても、あなたはそれを望まないでしょう)
Andy Krouwel

10

または、これが見つからない場合は単に情報メッセージを返します:

taskkill /f /im w3wp.exe /fi "memusage gt 2"

情報:ここから


3

これは1行のソリューションです。

プロセスが実際に実行されている場合にのみtaskkillを実行します。それ以外の場合は、実行されていないことを通知します。

tasklist | find /i "w3wp.exe" && taskkill /im w3wp.exe /F || echo process "w3wp.exe" not running.

これは、プロセスが実行されていた場合の出力です。

w3wp.exe           1960 Services                   0    112,260 K
SUCCESS: The process "w3wp.exe" with PID 1960 has been terminated.

これは実行されていない場合の出力です:

process "w3wp.exe" not running.

0

プロセスを強制終了(プロセスが実行中の場合)し、情報を出力しません。

次のコマンドは正常に機能します。

taskkill /f /im w3wp.exe /t /fi "status eq running">nul


これはw3wp.exeをどのように殺しますか?
ジェイソン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.