智慧并不产生于学历,而是来自对于知识的终生不懈的追求。这篇文章主要讲述使用高CPU时通知。通过AppleScript或Automator?相关的知识,希望能为你提供帮助。
每当进程使用超过50%的CPU时,我想自动化
它会向我的通知中心发送通知
我正在使用terminal-notifier发送通知
但是我对创建这种自动化的最佳方法有点困惑。
我应该使用Automator.app还是创建自定义AppleScript,如果是这样,
如何让它永远在线?
答案如果这是用于交互式使用,请让我建议一个实用的替代方案:
- 运行活动监视器。
- 按住Control键并单击其停靠图标。
- 选择
Dock Icon > Show CPU Usage
- 或者,对于浮动窗口,Monitors > Show CPU Usage
。
如果您确实需要自动化解决方案,我建议:
- 编写一个
bash
脚本,使用top
查找最高CPU百分比的任务,如果超过阈值,则调用terminal-notifier
。 - 将该脚本安排为用于定期调用的
launchd
任务。
即使运行
top
本身也会占用相当多的CPU。这是一个简单的bash脚本,大致可以满足您的需求:
#!/usr/bin/env bashread pct name <
<
(top -l 2 -n 1 -F -o cpu -stats cpu,command | tail -1)
if (( ${pct%.*} >
= 50 ));
then
/Applications/terminal-notifier.app/Contents/MacOS/terminal-notifier
-message "Process >
50%: $name ($pct%)"
fi
请注意,这需要至少2秒才能运行,因为必须收集2个样本(相隔1秒)来计算CPU使用百分比,因此在确定调用命令的频率时请考虑这一点。
更新 - 请参阅下面的逐步实施说明。
参考文献:
- 至于安排脚本让
launchd
在登录时运行它:请参阅https://stackoverflow.com/a/22872222/45375 launchd
*.plist
文件的一般格式在https://developer.apple.com/library/mac/documentation/Darwin/Reference/Manpages/man5/launchd.plist.5.html或man launchd.plist
中描述;StartInterval
是每N秒指定调用的关键。
- 创建bash脚本:
创建纯文本文件
~/watchcpu
(即主文件夹中的文件watchcpu
),将上面的bash脚本粘贴到其中,然后保存。 - 在登录时创建用于每次调用的启动代理,然后定期调用:
创建纯文本文件
~/Library/LaunchAgents/WatchCPU.plist
,将以下XML文档粘贴到其中,然后保存:
<
?xml version="1.0" encoding="UTF-8"?>
<
!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<
plist version="1.0">
<
dict>
<
key>
KeepAlive<
/key>
<
false/>
<
key>
Label<
/key>
<
string>
WatchCPU<
/string>
<
key>
ProgramArguments<
/key>
<
array>
<
string>
bash<
/string>
<
string>
-c<
/string>
<
string>
. ~/watchcpu<
/string>
<
/array>
<
key>
RunAtLoad<
/key>
<
true/>
<
key>
StartInterval<
/key>
<
integer>
15<
/integer>
<
/dict>
<
/plist>
- 加载每用户启动代理以激活它: 在终端中运行以下命令(仅需要一次; 从那时起,文件将在每次登录时自动加载):
launchctl load ~/Library/LaunchAgents/WatchCPU.plist
注意:
- 您可以自由选择自己的文件名和bash脚本的不同位置,但启动代理
.plist
文件必须位于~/Library/LaunchAgents
中才能在登录时自动加载。 - 间隔(键
StartInterval
)选择为15秒; 再次,您可以自由地更改它,但请注意,选择更频繁的调用没有多大意义,因为launchd
(调用启动代理的服务)会限制执行时间过于接近调用间隔的代理程序; 我不清楚细节,但在手头的解决方案中,间隔10秒会导致system.log
频繁出现限制通知(通过Console.app检查)。
set theDelay to 3 -- number of seconds to sample the CPU
set CPUusage to do shell script "top -F -l " &
theDelay &
" -n 1 -stats cpu | grep 'CPU usage:' | tail -1 | cut -d. -f1"
set idlePercent to word -2 of CPUusage as number
if idlePercent <
50 then display notification ("CPU usage is at " &
(100 - idlePercent) &
"%.") with title "CPU Usage"
请参阅注释以遵循do shell脚本命令的编辑,以允许从shell命令自然获取整数,以便更好地使用非英语系统。
推荐阅读
- Appium(连接到127.0.0.1:4723 [/127.0.0.1]失败:连接被拒绝:连接)
- 在appengine-web.xml中显示“URI未注册”的Android Studio lint()
- Google Apps脚本 - 复制到现有电子表格
- 带有Firebase的Google App Engine-无法添加依赖项
- 差异b / w在AsyncTask Android中取消(true)和取消(false)
- 如何取消Android中的AsyncTask()
- 为什么我用AsyncTask获取android.os.NetworkOnMainThreadException()
- 在Android中如何从Asynctask接收字符串()
- Android SDK AsyncTask doInBackground未运行(子类)