为什么我不断收到错误“无法将\”0.0 \“转换为类型编号。”数字-1700从“0.0”到数字?如果我将删除为数字,则显示对话框始终显示。
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
答案 0 :(得分:1)
我用Safari进程尝试了你的脚本,但也得到了错误。似乎从&#34; do shell脚本&#34;返回了多个结果。 line ...所以它无法将结果变成数字。
我将代码更改为此代码并且有效...
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
答案 1 :(得分:1)
我只运行了grep命令,发现在我的机器上webkit正在运行一个与Safari PID绑定的WebProcess。您可以在第二行末尾看到-servicename
为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
答案 2 :(得分: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上尝试的所有其他进程,这对我来说很好。