如何在命令行上按进程ID查找Windows进程

问题描述 投票:0回答:1

我有两个进程在运行(Windows7教程中的foo.cmd和bar.cmd),如果另一个进程仍在运行,它们都经常检查。由于每个进程都知道变量%FPID%中其他进程的PID,因此我用来检查其他进程是否仍然像这样运行

FOR /F "tokens=1,*" %%a in ('tasklist /FI "PID eq %FPID%" /NH ^| find /C "%FPID%"') do set COUNTP=%%a

如果%COUNTP%现在大于0,则另一个进程仍在运行。

但是偶尔%COUNTP%等于0,即使其他进程实际上仍在运行(它仍然写入日志文件)。一秒钟后,它可以再次被发现。

  • 哪种情况可能导致无法通过其ID找到正在运行的进程,就像我上面的语句一样?
  • 是否有更好/更好/更快的方法来检查某个PID的进程是否仍处于活动状态并且正在运行(在Windows上)?
command-line process cmd pid tasklist
1个回答
0
投票

在我的头顶,我正在查看WMI事件观察者的__InstanceDeletionEvent类。如果你选择那条路线,这个剪辑将让你朝着正确的方向前进,由WMI Code Creator提供。

基本上,WMI将等待并检测$ pid何时关闭,并在发生的1秒内执行命令。

strComputer = "." 
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") 
Set objEvents = objWMIService.ExecNotificationQuery _
("SELECT * FROM __InstanceDeletionEvent WITHIN 1 WHERE TargetInstance.ProcessId = 1900")

Wscript.Echo "Waiting for events ..."
Do While(True)
    Set objReceivedEvent = objEvents.NextEvent

    'report an event
    Wscript.Echo "__InstanceDeletionEvent event has occurred."

Loop
© www.soinside.com 2019 - 2024. All rights reserved.