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
フラグはフィルタを指定します。この場合、画像名でフィルタリングします
- フラグは、出力形式(
/fo
TABLE (デフォルト)、LIST、および CSV) を指定します。CSV を選択したのは、解析が最も簡単だからです。
- これ
/nh
は、ヘッダーを省略するように tasklist.exe に指示します (AKA ヘッダーなし)。
getPids
空のリストを返す場合、プロセスは実行されていません。
getPids
複数の PID を返す可能性があるため、コードはそのケースを処理できる必要があります。