【问题标题】:Running / killing executable using .bat file使用 .bat 文件运行/杀死可执行文件
【发布时间】:2015-11-24 15:50:36
【问题描述】:

批处理文件脚本对我来说是全新的,所以请耐心等待...

为了在 Windows(10、64 位)环境中运行许多(例如 5076)计算,我使用.bat 文件:

gulp.exe < input-1.dat > output-1.out
gulp.exe < input-2.dat > output-2.out
gulp.exe < input-3.dat > output-3.out
                 .
                 .
                 .
gulp.exe < input-5076.dat > output-5076.out

不幸的是,一些计算将挂起(原因不明)...目前,当这种情况发生时,我手动终止整个批处理命令...这意味着我必须密切关注计算的进展情况并且不能简单地让它们运行(例如过夜)

因此,如果 gulp.exe 可执行文件已经运行了 30 分钟,我正在寻找一种自动杀死它的方法,但是这意味着我的列表中的下一个计算仍在运行。
即如果计算 2 挂起,杀死它并运行计算 3

搜索 [1, 2] 表示taskkill 可能是我正在寻找的命令,但对于它是否会杀死 .bat 脚本或可执行文件以及如何将其应用于列表中的多个计算有点困惑。

因此,我真的很感激一些指针...... 谢谢

【问题讨论】:

  • 由于一个任务一个接一个地执行,所以应该只有一个名为gulp.exe的进程,所以taskkill /IM gulp.exe应该可以工作(添加/F强制杀死;如果添加/FI "status ne running"挂起由状态 not responding) 反映;我不确定您是否需要在每个 gulp 呼叫前加上 start "" /WAIT...

标签: windows batch-file


【解决方案1】:

计算会消耗 CPU 时间,因此您可以使用内置的 typeperf 在 1 秒内进行分析,假设一次只能运行一个 GULP 进程。

@echo off

set INTERVAL=1
set CPUTHRESHOLD=0.1

call :runGulp "input-1.dat" "output-1.out"
call :runGulp "input-2.dat" "output-2.out"
call :runGulp "input-3.dat" "output-3.out"

pause
exit /b

:runGulp
    start /b gulp <"%~1" >"%~2"
    :wait
        for /f "delims=, tokens=2 skip=2" %%a in ('
            typeperf "\Process(GULP)\%% Processor Time" -si %INTERVAL% -sc 1
        ') do (
            if %%~a GEQ %CPUTHRESHOLD% goto wait
            if %%~a==-1 exit /b
        )
    taskkill /f /im gulp.exe
    exit /b

【讨论】:

  • 嗨@wOxxOm,感谢您对我的问题的回答。不幸的是,我已经尝试了您提供的代码以及几个示例文件,但只是收到错误“系统找不到指定的批处理标签-runGulp”...因为我认为调用关键字正在尝试打开一个单独的批处理文件,我在同一个文件夹中有一个名为“runGulp.bat”的 .bat 文件,它与我的原始文件具有相同的结构......我不太明白,所以如果你能提供建议,我将非常感激。
  • 有一个错字,我已经修正了。
  • 好的,修复已经奏效(我认为 - 脚本/计算现在至少可以运行)。但是,对此我真的很抱歉,我很困惑......我的想法是否正确:typeperf 函数查看处理器时间 - 将值存储在 a;它只需要 1 个样本 (-sc 1) [或者是以 1 秒的间隔采集一个样本]。此外,如果 cputhreshold 为 0.1,'a' 不是总是大于阈值吗? /或为什么永远等于-1?如果这些是愚蠢的问题,我们深表歉意......谢谢
  • 你可以自己测试一下:在一个窗口中启动一些长时间运行的 gulp 命令,在另一个命令提示符窗口中运行typeperf "\Process(GULP)\%% Processor Time" -si 1 -sc 1。至于命令行开关,您可以随时运行typeperf /? 来查看说明。
  • 当我像你说的那样尝试测试它时,我只是收到消息“错误:没有有效的计数器”和一条说明,告诉我我需要成为本地性能日志用户组的成员或我需要从提升的命令提示符处执行命令。我不知道这些是什么意思……对于前者,我是管理员,并且是我正在使用的笔记本电脑上的唯一用户;对于后者,我该怎么做?
猜你喜欢
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 2022-08-19
  • 1970-01-01
  • 2016-03-16
  • 2017-10-30
  • 1970-01-01
相关资源
最近更新 更多