批处理文件以检查 exe 是不是正在运行,如果是,则 taskkill
Posted
技术标签:
【中文标题】批处理文件以检查 exe 是不是正在运行,如果是,则 taskkill【英文标题】:batch file to check if exe is running if so taskkill批处理文件以检查 exe 是否正在运行,如果是,则 taskkill 【发布时间】:2013-08-19 08:27:08 【问题描述】:我遇到了 firefox Flashplayerplugin 在不使用时占用过多内存并导致系统滞后的问题。我发现的唯一解决方案是在使用 firefox 时杀死 flashplayerplugin,卸载、重新安装或新的 firefox 安装或新配置文件都不能解决它;然而,不得不一直检查任务管理器并杀死它变得非常乏味,而flashplayerplugin似乎总是自己启动。
我的问题是是否可以创建一个批处理文件来检查 FlashPlugin_11_8_800_94.exe 是否正在运行并在一段时间(5-10 秒)后将其杀死并继续主动运行批处理文件,循环,扫描 FlashPlugin_11_8_800_94.exe 是否再次启动,然后在 5 - 10 秒后将其杀死,冲洗并重复?
编辑:
找到一个批处理文件并对其进行了修改,但似乎也缺少一些边界来主动搜索它是否正在运行,即使它没有运行。不过这两种方法都行不通。
@echo off
:search
TASKLIST|FIND "FlashPlayerPlugin"
IF %ERRORLEVEL% = 0 THEN (GOTO found)
TIMEOUT /T 5
GOTO search
:found
taskkill /im FlashPlayerPlugin_11_8_800_94.exe
--
这个批处理文件也不起作用。
set tasklist=%windir%\System32\tasklist.exe
set taskkill=%windir%\System32\taskkill.exe
-------------------------------------------------------
:STOPPROC
set wasStopped=0
set procFound=0
set notFound_result=ERROR:
set procName=%1
for /f "usebackq" %%A in (`%taskkill% /IM %procName%`) do (
if NOT %%A==%notFound_result% (set procFound=1)
)
if %procFound%==0 (
echo The process was not running.
goto :EOF
)
set wasStopped=1
set ignore_result=INFO:
:CHECKDEAD
"%windir%\system32\timeout.exe" 3 /NOBREAK
for /f "usebackq" %%A in (`%tasklist% /nh /fi "imagename eq %procName%"`) do (
if not %%A==%ignore_result% (goto :CHECKDEAD)
)
goto :EOF
-------------------------------------------------------
:MAIN
call :STOPPROC FlashPlayerPlugin_11_8_800_94.exe
【问题讨论】:
如果上面的代码可以正常结束进程一次,只需在顶部添加:loop
,在底部添加goto loop
。另一个问题,为什么需要检查进程是否处于活动状态。为什么不让批处理文件继续关闭FlashPlayerPlugin_11_8_800_94.exe
的任何实例?那会容易得多。
我发布的批处理文件都没有工作,它们在执行时都显示空白提示。
【参考方案1】:
taskkill /im FlashPlugin_11_8_800_94* /f >nul 2>&1
【讨论】:
/f
位于 /im
之前
其实没关系..如果你不相信我,你可以这样测试:-)【参考方案2】:
对于仍然可能觉得它有用的任何人: 这是一个小脚本,每 5 秒扫描一次 tasklist 以查找包含 processname 的进程。例如,如果您将“记事本”作为进程名,它将结束诸如“notepad.exe”和“notepad++.exe”之类的进程。要使用该脚本,请将以下内容复制并粘贴到记事本中并保存“simple_pk.cmd”。 processname 可以包含除双引号 (")、和号 (&) 或逗号 (,) 之外的任何字符。
::Simple monitor and kill process
@echo off&prompt :&mode con cols=50 lines=10
set processname=flashplayerplugin
:loop
cls&echo Searching for %processname%...
for /f "tokens=1 delims=," %%a in ('tasklist /fo csv ^|FINDSTR /I /C:"%processname%"') do call :killprocess %%a
ping -n 6 127.0.0.1>NUL
goto :loop
:killprocess
echo. |set /p d=killing %*...
taskkill /f /im "%*">nul 2>&1
set err=%errorlevel%
set success=Success
if not %err%==0 set success=fail (err code: %err%)
if %err%==128 set success=fail (process not found)
echo %success%&goto :eof
这是同一脚本的略有不同的版本。这只会结束与全名完全匹配的进程:
::Simple monitor and kill process (exact name)
@echo off&prompt :&mode con cols=50 lines=10
set processname=FlashPlayerPlugin_11_8_800_94.exe
:loop
cls&echo Searching for %processname%...
for /f "tokens=1 delims=," %%a in ('tasklist /fo csv ^|FINDSTR /C:"%processname%"') do call :killprocess %%a
ping -n 6 127.0.0.1>NUL
goto :loop
:killprocess
set name=%*
set name=.,;%name:"=%;,.
echo %name%|FINDSTR /C:".,;%processname%;,.">nul || goto :eof
echo. |set /p d=killing %*...
taskkill /f /im "%*">nul 2>&1
set err=%errorlevel%
set success=Success
if not %err%==0 set success=fail (err code: %err%)
if %err%==128 set success=fail (process not found)
echo %success%&goto :eof
【讨论】:
【参考方案3】:我正在查看顶部的第一段代码,我相信我找到了一种方法。这就是我得到的;真的很简单。
@echo off
cls
:start
timeout /t 5
tasklist|find "explorer.exe"
goto found
goto start
:found
taskkill /f /im explorer.exe
goto start
当然,任何程序都可以工作。
【讨论】:
【参考方案4】:你的 IF 不正确:
@echo off
:search
TASKLIST|FIND "setup.exe"
IF %ERRORLEVEL% equ 0 (GOTO found)
TIMEOUT /T 5
GOTO search
:found
taskkill /im setup.exe
【讨论】:
你能告诉我们右手边带 K 的数字是什么意思吗?还有为什么这个命令会显示@echo off
是否存在?【参考方案5】:
更简单的形式
@echo off
:search
TASKLIST|FIND "setup.exe"
IF %ERRORLEVEL% equ 0 (taskkill /im setup.exe
exit)
TIMEOUT /T 5
GOTO search
【讨论】:
以上是关于批处理文件以检查 exe 是不是正在运行,如果是,则 taskkill的主要内容,如果未能解决你的问题,请参考以下文章
如何通过批处理文件检查服务是不是正在运行并启动它,如果它没有运行?
检查 Windows 服务列表是不是正在运行,如果不是从批处理文件启动
如果 Notepad.exe 正在运行,则 taskkill 如果未运行,则转到下一条语句