2

为什么我不断收到错误“无法将 \"0.0\" 转换为类型号。” 从“0.0”到数字的数字-1700?如果我删除为 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

我用进程 Safari 尝试了你的脚本,也得到了错误。似乎从“do shell script”行返回了不止一个结果......所以它不能把结果变成一个数字。

我将代码更改为此并且它工作...

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

        if cpuPercent < 5 then
            display dialog cpuPercent as text
        end if
    end repeat
end tell
于 2013-07-29T07:16:13.140 回答
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 powerbook 上尝试过的所有其他进程。

于 2013-10-25T23:18:28.457 回答
1

我只运行了 grep 命令,发现在我的机器上 webkit 正在运行一个与 Safari PID 绑定的 WebProcess。您可以在第二行的末尾看到-servicenameis com.apple.WebKit.WebProcess-4881-0x1076eb0c0。正因为如此,grep 实际上是找到两个结果并返回"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 回答