批处理文件以检查 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 服务列表是不是正在运行,如果不是从批处理文件启动

批处理 ERRORLEVEL 问题

如果 Notepad.exe 正在运行,则 taskkill 如果未运行,则转到下一条语句

x64 C ++可执行文件未在nanoserver docker容器中运行

我需要设置一个任务以在 32 cmd.exe 中运行批处理文件