web-dev-qa-db-ja.com

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

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

taskkill /f /im w3wp.exe

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

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

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

36
Luk

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

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

私がこれに対して見つけた解決策は実行することでした

START /wait taskkill /f /im w3wp.exe

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

23
Dustin Gamester

これもうまくいきます:

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

または、見つからない場合は情報メッセージを返します。

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

情報: ここ

11
acarlon

これは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.
4
nicovota

短い答え:

追加|| exit 0

詳細

私は与えられた正確なケースをテストすることはできませんが、これはうまくいくことがわかりました:

pskill w3wp.exe || exit 0

'||'最初のコマンドが失敗した場合、2番目のコマンドを実行するように言います。 「;」同様に動作するはずです。

さらに、コマンドを完全に無音にするには、次のようなコマンドを使用します。

rem totally silent
rem order matters. Redirect then join
some_cmd 1>nul: 2>>&1
0
Andrew Dennison

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

次のコマンドは正常に動作します。

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

0
PandllCom

ビジュアルスタジオでの事前構築イベントの場合、これは私にとってうまくいきました:

taskkill /f /im scriptcode.exe 2>nul 1>nul
exit 0

参照してください: https://stackoverflow.com/questions/5806444/swallowing-errors-in-pre-build-steps-in-visual-studio-201

ステータス=実行中のチェックで問題が発生しました。プロセスは存在しましたが、ステータス=実行中ではありませんでした。以前使っていました。

0
Derek