ここでの問題は、psコマンドが返す情報が多すぎることです。私が書いているように、私が何を意味するかを説明するために、私のGoogle Chromeプロセスのpidは916です。質問のアプローチを使用して、ps aux | grep 916このプロセスを確認することができました。しかし、これだけでは不十分です。grep は、ps出力内の文字列「916」の任意のインスタンスに一致するため、pid が 1916 または 9160 のプロセスが発生した場合、これも一致します。またps aux、他の多くの統計を一覧表示します。その多くには、文字列「916」も含まれる可能性があります。実際、実行ps aux | grep -c 916すると、現在 58 行が一致しています。
したがって、必要なpsのは、特定の pid のみに関心があることを伝えることだけです。
$ ps -o%cpu -p 916 | grep '[[:digit:]]'
0.5
$
これにより、指定された $PID を持つプロセスの cpu% のみが一覧表示されます。grep '[[:digit:]]'数値パーセンテージのみを返し、ps出力から「CPU」列ヘッダーを削除するには、へのパイプが必要です。
これを元のスクリプトにまとめると、次のようになります。
tell application "System Events"
repeat
set PID to unix id of process "JPEGmini"
set getCpuPercent to "ps -o%cpu -p " & PID & " | grep '[[:digit:]]'"
set cpuPercent to (do shell script getCpuPercent) as number
if (cpuPercent) < 5 then
display dialog cpuPercent
end if
end repeat
end tell
JPEGmini はインストールしていませんが、OSX 10.8.5 パワーブックで試した他のすべてのプロセスでは問題なく動作します。