2

「\"0.0\" を型番号にできません」というエラーが発生し続けるのはなぜですか。数値 -1700 「0.0」から数値へ? number として削除すると、表示ダイアログが常に表示されます。

tell application "System Events"
    repeat
        set PID to unix id of process "JPEGmini"
        set getCpuPercent to "ps aux | grep " & PID & " | grep -v grep | awk '{print $3}'"
        set cpuPercent to (do shell script getCpuPercent) as number

        if (cpuPercent) < 5 then

            display dialog cpuPercent

        end if
    end repeat
end tell
4

3 に答える 3

1

ここでの問題は、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 パワーブックで試した他のすべてのプロセスでは問題なく動作します。

于 2013-10-25T23:18:28.457 に答える
1

grep コマンドだけを実行したところ、自分のマシンで webkit が Safari PID に関連付けられた WebProcess を実行していることがわかりました。-servicename2 行目の終わりに向かって、 が であることがわかりますcom.apple.WebKit.WebProcess-4881-0x1076eb0c0。そのため、grep は実際には 2 つの結果を見つけ"0.0\r0.0"て、数値にできないものを返しています。

$user        4881  13.3  1.2  3812416 104840   ??  R     4:27PM   0:09.57 /Applications/Safari.app/Contents/MacOS/Safari -psn_0_1692061
$user        4885   0.1  0.7  3778328  56108   ??  S     4:27PM   0:00.79 /System/Library/StagedFrameworks/Safari/WebKit2.framework/WebProcess.app/Contents/MacOS/WebProcess /System/Library/StagedFrameworks/Safari/WebKit2.framework/WebKit2 -type webprocess -servicename com.apple.WebKit.WebProcess-4881-0x1076eb0c0 -localization en_US -client-identifier com.apple.Safari -ui-process-name Safari
$user        5250   0.0  0.0  2432768    520   ??  R     4:29PM   0:00.00 grep 4881
$user        5248   0.0  0.0  2433432    824   ??  S     4:29PM   0:00.00 sh -c ps aux | grep 4881
于 2013-10-24T20:37:10.000 に答える