【问题标题】:Find out process ID of nunit of particular instance找出特定实例的 nunit 的进程 ID
【发布时间】:2018-11-26 11:31:22
【问题描述】:

我有三个批处理文件,每个打开一个NUnit 的实例。我想在测试完成后杀死 NUnit 的特定实例。我能够获取三个NUnit 实例的三个进程ID。

但是有没有办法找出哪个 processId 对应哪个 Nunit 实例?

查看下图。

这里显示的是进程 ID。但无法识别哪个是哪个实例。

这是我用于杀死 NUnit 进程 ID 的批量代码。

for /F "tokens=1,2,*" %%a in ('tasklist /FI "IMAGENAME eq nunit.exe"') do (
SETLOCAL ENABLEDELAYEDEXPANSION
set PID=%%b
echo PID StartRun_XXX=!PID!)

::echo before loop 
:: Check for TestResult.xml file generation. 
:: at the moment when TestResult.xml generated, kill the NUNIT instance and subsequently call OverViewGenerator.bat to generate TestResult.htm


pause
:loop
if exist %~dp0TestResult_%TestCategory%_%TimeStamp%.xml (
    cd %~dp0
    echo ====================inside if exist------dp0=%~dp0===================
    pause
    echo PID=!PID!
    taskkill /PID !PID! /T

这段代码会突然杀死任何 nunit 实例。

【问题讨论】:

  • for 循环将用所有找到的 nunit PID 覆盖 PID,因此只有最后一个仍然存在。在 if 代码块中 taskkill 只会杀死最后一个 PID。
  • 为什么不检查每个实例前后的 PID? 然后您可以在决定杀死哪个实例之前确定哪个 PID 属于哪个实例

标签: batch-file nunit taskkill


【解决方案1】:

您最好的选择可能是在启动时区分nunit 进程。

可以获取通过WMIC启动的进程的PID:

set "tab="  <<<<<<<<<<<< PLEASE insert TAB after '=' 
set "pid="
for /F "usebackq tokens=1,2 delims=;=%tab% " %%i in (           
     `wmic process call create "nunit.exe"^, "C:\working\dir"`
) do if %%j gtr 0 set pid=%%j

(复制自this答案)

然后你可以将PID保存到文件中

echo set "PID=%pid%" >yourfile.bat

要杀死进程只需运行脚本以获取变量

call yourfile.bat
taskkill /pid %pid%
taskkill /f /pid %pid%
del /y yourfile.bat

另见:How to get the output of "wmic process call create"

【讨论】:

    猜你喜欢
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-08
    • 1970-01-01
    • 2018-04-30
    • 1970-01-01
    相关资源
    最近更新 更多