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

时间:2013-12-16 14:54:53

标签: command-line process cmd pid tasklist

我有两个进程正在运行(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上)?

1 个答案:

答案 0 :(得分: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