0

我有两个进程正在运行(Windows7 prof 上的 foo.cmd 和 bar.cmd),它们都经常检查另一个进程是否仍在运行。由于每个进程都知道变量中其他进程的PID,所以%FPID%我曾经这样检查其他进程是否还在运行

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 上)?
4

1 回答 1

0

在我的脑海中,我正在查看 WMI 事件观察器的 __InstanceDeletionEvent 类。如果你选择了这条路线,这个片段会让你朝着正确的方向前进,感谢 WMI 代码创建者。

基本上,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
于 2013-12-16T15:53:38.033 回答