我正在尝试编写一个批处理脚本,以检测.exe是否没有响应,如果没有响应,它将运行一段代码将其杀死,然后还执行其他一些操作。我知道如何终止该进程并在没有响应的情况下重新启动它,但是除了将其转换为if语句或调用goto来重新启动之外,我不确定如何做。
taskkill /im "exeName.exe" /fi "STATUS eq NOT RESPONDING" /f >nul && start "" "pathToExe"
我遇到了其他与此类似的Stack Overflow帖子,但是它们仅检查流程的错误级别,并且不检查程序是否没有响应以及在此之后如何执行代码。
我将如何处理?预先感谢。
答案 0 :(得分:0)
假设我正确地解释了您的问题,并且您想在不终止任务的情况下进行测试,那么呢:
tasklist /fi "status eq not responding" /nh | find "exeName.exe" >NUL
if %errorlevel% == 0 (
echo Oops, we've hung...
)
tasklist
采用与/fi status
相同的taskkill
选项,即使文档指出只允许RUNNING
-Windows 8上的taskkill /?
至少显示完整的选择。然后,我们使用find
来检查可执行文件是否在没有响应的任务列表中。
顺便说一句,如果您想改用PowerShell
:
$foo = get-process exeName
if (!$foo.Responding) {
echo "Oops, we've hung..."
}
答案 1 :(得分:0)
可以轻松完成:
taskkill /FI "STATUS eq NOT RESPONDING" /IM "yourexe.exe" /F | findstr /c:"SUCCESS" >nul
if %errorlevel% EQU 0 (echo Successfully detected and terminated "yourexe.exe" which didn't respond) else (echo Ooops! We didn't find or could not terminate process "yourexe.exe")
如果您只是想检测过程是否没有响应,请使用tasklist
:
tasklist /FI "STATUS eq NOT RESPONDING" | findstr /c:"yourexe.exe">nul
if %errorlevel% EQU 0 (echo We have detected that process with image name "yourexe.exe" is not responding.) else (echo We didn't found process with image name "yourexe.exe" because it doesn't exist.)
在两种情况下,我们都使用findstr
命令,因为即使未找到/终止的进程taskkill
/ tasklist
也会返回errorlevel
0
。