mac无内置闲置关闭应用开关,但可通过applescript+automator实现图形化单应用空闲退出、launchd守护进程实现秒级精准多窗口浏览器关闭、快捷指令+日历事件实现人工确认式空闲关闭。

Mac没有“闲置自动关闭应用”的系统开关,但可通过进程监控+脚本触发方式,在检测到目标应用长时间无交互后强制退出——这能有效防止后台偷跑、节省内存和电池,且不依赖用户手动操作。
用 AppleScript + Automator 实现应用空闲检测关闭
该方法适用于单个常驻应用(如微信、钉钉、Zoom),通过轮询判断其是否处于前台且有鼠标/键盘活动,10分钟无操作即退出,全程图形化配置,无需终端权限。
第一步:打开“自动操作”(Automator)→ 新建文档 → 选择“应用程序”模板 → 点击“选取”。
第二步:在右侧操作库搜索“运行 AppleScript”,拖入工作流区域。
第三步:粘贴以下脚本(以微信为例):
on run {input, parameters}
set appname to "WeChat"
repeat 10 times
try
if (application appname is frontmost) and (do shell script "ioreg -c IOHIDEventService | grep -q 'timestamp' && echo 1 || echo 0") is "1" then
delay 60
else
delay 60
end if
on error
delay 60
end try
end repeat
tell application appname to quit
end run
第四步:菜单栏 → 文件 → 存储 → 命名为“微信空闲关闭” → 保存到“应用程序”文件夹。
第五步:双击运行该应用,它会后台持续监测;若微信连续10分钟未被置顶且无 HID 输入事件,即执行退出。⚠️注意:脚本中ioreg -c IOHIDEventService依赖系统 HID 日志,macOS Ventura 及更新版本默认启用,无需额外开启。
用 launchd 创建精准空闲判定守护进程
此方案绕过前台检测逻辑,直接读取应用进程的 last activity 时间戳,适合 Chrome、Safari 等多窗口浏览器,精度达秒级,且开机即生效、不依赖用户登录状态。
方法一:创建空闲检测脚本
打开终端,执行:touch ~/bin/app-idle-quit.shchmod +x ~/bin/app-idle-quit.sh
用 nano 编辑该脚本:nano ~/bin/app-idle-quit.sh
粘贴内容(以 Safari 为例):
#!/bin/bash<br>APP_PID=$(pgrep -f "Safari.app")<br>if [ -n "$APP_PID" ]; then<br>LAST_ACTIVITY=$(ps -o etime= -p $APP_PID 2>/dev/null | xargs)<br>if [ "$LAST_ACTIVITY" -gt 600 ]; then<br>kill -9 $APP_PID 2>/dev/null<br>fi<br>fi
方法二:配置 launchd 定时执行
执行:mkdir -p ~/Library/LaunchAgentsnano ~/Library/LaunchAgents/com.user.idlequit.plist
粘贴以下内容:
<?xml version="1.0" encoding="UTF-8"?><br><br><plist version="1.0"><br><dict><br><key>Label</key><br><string>com.user.idlequit</string><br><key>ProgramArguments</key><br><array><br><string>/Users/$(whoami)/bin/app-idle-quit.sh</string><br></array><br><key>StartInterval</key><br><integer>30</integer><br><key>RunAtLoad</key><br><true></true><br></dict><br></plist>
【务必把 /Users/$(whoami) 替换为你真实的主目录路径,例如 /Users/john】
保存后执行:launchctl load ~/Library/LaunchAgents/com.user.idlequit.plist
用快捷指令+日历事件实现人工可控空闲关闭
当你需要临时启用空闲关闭、又担心误关正在编辑的文档时,这个方案最安全:它不自动执行,而是由你主动点击日历事件触发确认弹窗,再决定是否退出指定应用。
第一步:打开“日历”App → 新建一个全天事件,标题写“关闭 Slack” → 设置提醒为“提前 1 分钟” → 在提醒动作里选“添加提醒” → 点击“添加操作” → 搜索并添加“运行 AppleScript”。
第二步:脚本内容写:
display alert "Slack 已空闲超过15分钟,是否关闭?" buttons {"取消", "关闭"} default button "关闭"<br>if button returned of result is "关闭" then<br>tell application "Slack" to quit<br>end if
第三步:把这个事件设为每年重复(或手动复制),每次你想启动空闲监控时,就把它拖到当天日程里——时间一到,桌面弹出确认框,点“关闭”才真正退出。











