Taskkill.exe:如果进程未运行,请不要抛出错误


33

我正在运行一个Visual Studio生成后事件,如果编译后它仍在运行,它将关闭IIS:

taskkill /f /im w3wp.exe

如果IIS仍在运行,则下面的命令可以正常工作,但是如果它已经停止,则抛出错误:

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

如果无法找到匹配的正在运行的进程,是否可以告诉Taskkill忽略该问题?

Answers:


29

不是运行一个命令,而是运行一个小的批处理文件?

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 '16

1
等待是一个非常重要的细节。我将其编辑为原始答案以避免混淆。谢谢@jezternz!
Dustin Gamester

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

这是一线解决方案

仅当进程确实在运行时,它才会运行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?
杰森·艾勒
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.