0

私の TCL スクリプトでは、テストの完了後に再実行できるプロセスを実行しています。ただし、プログラムが起動するのに十分な時間を確保するために、40 秒の待機期間があります。プログラムが実行されている場合、この 40 秒間の待機期間は望ましくありません。プログラムが現在実行されているかどうかを判断するために、タスクリストを検索して読み取る方法はありますか? 私は PID について考えていましたが、プログラムを実行するたびに変更されます。おそらく、メモリの別の領域に配置されているためです。

このプロセスを実行するバッチ ファイルを作成しましたが、結果を TCL に戻す必要があります。これを達成する方法はありますか?

4

3 に答える 3

2

twapi を持っていない場合は、代わりの方法があります: 次を使用しますtasklist.exe

package require csv

proc getPids {imageName} {
    set noTaskMessage "INFO: No tasks are running which match the specified criteria."
    set output [exec tasklist.exe /fi "imagename eq $imageName" /fo csv /nh]
    set pidList {}
    if {$output != $noTaskMessage} {
        foreach line [split $output \n] {
            set tokens [::csv::split $line]
            lappend pidList [lindex $tokens 1]
        }
    }
    return $pidList
}

# Try it out
set imageName chrome.exe
set pids [getPids $imageName]
if {$pids == ""} {
    puts "Process $imageName is not running"
} else {
    puts "PIDs for $imageName: $pids"
}

討論

  • 「イメージ名」には拡張子 (chrome.exe など) を含める必要があります。
  • /fiフラグはフィルタを指定します。この場合、画像名でフィルタリングします
  • フラグは、出力形式( /foTABLE (デフォルト)、LIST、および CSV) を指定します。CSV を選択したのは、解析が最も簡単だからです。
  • これ/nhは、ヘッダーを省略するように tasklist.exe に指示します (AKA ヘッダーなし)。
  • getPids空のリストを返す場合、プロセスは実行されていません。
  • getPids複数の PID を返す可能性があるため、コードはそのケースを処理できる必要があります。
于 2013-08-12T23:06:27.937 に答える