0

実行中の 2 つのプロセス (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 に等しくなります (ログファイルにはまだ書き込まれます)。1秒後、再び見つけることができました。

  • 上記のステートメントのように、実行中のプロセスを ID で見つけられないのはどのような状況ですか?
  • 特定の PID のプロセスがまだアクティブで実行中 (Windows 上) であるかどうかを確認するためのより良い/より良い/より高速な方法はありますか?
4

1 に答える 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
于 2013-12-16T15:53:38.033 に答える