临时阻止 Mac 进入空闲睡眠,可包裹命令或在后台定时保持唤醒。
caffeinate 通过持有电源断言阻止睡眠:-d 阻止显示器休眠,-i 阻止空闲系统睡眠,-m 阻止磁盘休眠,-s 在接电源时阻止系统睡眠,-u 声明用户活动,-t 指定持续秒数,-w 等待指定 PID 结束后退出。它只影响电源管理,不改变系统设置,进程退出后断言自动释放。
边界:合盖仍然会睡(除非外接电源和显示器,或用 pmset 的 disablesleep);它不会绕过锁屏、密码或 MDM 策略。-s 只在电源适配器供电时有效,电池模式下不会阻止睡眠。需要长期生效应改 pmset 或用 LaunchAgent,而不是留一个终端窗口。
# 1. 一小时内不让显示器、系统和磁盘休眠
% caffeinate -dimsu -t 3600
# 2. 包裹一条命令,命令结束自动退出
% caffeinate -i make -j8
# 3. 等某个进程结束前保持不休眠,适合大文件传输
% caffeinate -i -w "$(pgrep -x rsync)"
# 4. 模拟一次用户活动,仅保持几秒(常用于唤醒显示器)
% caffeinate -u -t 5
# 5. 后台保持唤醒,记录 PID 便于收尾
% caffeinate -d & echo $! > /tmp/caffeinate.pid
# 6. 验证当前有哪些电源断言在阻止睡眠
% pmset -g assertions | grep -i caffeinate
caffeinate -d 能让合盖继续运行:合盖睡眠由硬件策略决定,-d 只阻止显示器休眠;需要合盖运行得接电源和外接显示器,或谨慎使用 pmset disablesleep。-s 在电池供电时不生效;排查“为什么还是睡了”先看 pmset -g batt 和是否接电源。caffeinate 被 SIGHUP 终止,断言随之释放;需要后台常驻时用 nohup 或 LaunchAgent,并记录 PID。-t,进程会一直运行到被手动结束,笔记本放包里持续发热;用完 kill "$(cat /tmp/caffeinate.pid)"。caffeinate -w PID 的 PID 必须已存在;写脚本时先检查 pgrep 结果,避免 -w 直接报错退出。pmset — 查看和永久修改睡眠策略。launchctl — 需要长期运行时用 LaunchAgent 管理。top — 观察保持唤醒期间是否有异常占用。shutdown — 对照 Windows 的关机、休眠与电源控制。合上页面,先回答,再展开对照。
caffeinate -d、-i、-s 分别阻止什么?为什么 -s 在电池模式下可能无效?caffeinate 能解决吗?还需要哪些条件?-d 阻止显示器休眠,-i 阻止空闲系统睡眠,-s 在接电源时阻止系统睡眠;电池模式下 -s 不生效。nohup、后台进程记录 PID,或用 LaunchAgent 管理。pmset disablesleep(有散热风险)。
小程序版
微信扫码,随时查命令