防止睡眠
又称:是什么让我的Mac无法睡眠
简要回答
“防止睡眠”是活动监视器“能耗”标签页中的一列,显示某个App此刻是否在阻止Mac进入睡眠。App在播放媒体、下载或运行长时间任务时,会有意这样做。
App通过获取电源断言来让Mac保持唤醒,也就是请求macOS推迟睡眠。视频播放器在播放电影时会这样做,备份或下载可能会一直这样做到完成为止。大多数App在完成后会撤销这个请求。
如果你的Mac不会自动睡眠,或者显示器一直亮着,首先要看的就是“防止睡眠”这一列。
本页内容
如何找出是什么让Mac无法睡眠
打开活动监视器,点按“能耗”标签页,再点按“防止睡眠”列按它排序。显示“是”的App正在让Mac保持唤醒。
要看更多细节,在“终端”中运行pmset -g assertions。它会列出每个生效中的断言及其所属进程,后台进程也包括在内。
怎么处理
如果这个App有正当理由,比如正在下载,就让它完成。如果没有,正常退出这个App通常就会撤销断言。正在播放媒体的浏览器标签页(包括已静音的)是常见原因。
如何看懂pmset -g assertions
想要一句话的答案,就运行pmset -g,看sleep那一行。如果有东西让Mac保持唤醒,这一行末尾会是sleep prevented by,后面跟着一串进程名称。
pmset -g assertions会给出详细信息。上半部分是断言类型的摘要,名为Listed by owning process的部分则显示每个进程、它持有断言多久了,以及App给这个断言起的名字。你最常看到的类型有:
- PreventUserIdleSystemSleep:Mac不会自动睡眠,但显示器仍然可以关闭。
- PreventUserIdleDisplaySleep:显示器保持亮着。视频播放器和演示App会用它。
- PreventSystemSleep:Mac完全无法睡眠。它的
caffeinate -s版本只在接通电源时有效。 - NoIdleSleepAssertion:一些App在阻止Mac闲置睡眠时使用的另一个名称。
- powerd持有一个名为Prevent sleep while display is on的断言:你在使用Mac时,这很正常。
当coreaudiod或其他系统进程让Mac保持唤醒时
有时pmset -g assertions中的持有者是一个系统进程,比如coreaudiod,它在替另一个App持有断言。这种情况下,条目中会有一行写着Created for PID,后面跟着一个号码。这个号码就是你要找的App。
- 运行
pmset -g assertions,在该系统进程下面找到Created for PID那一行。 - 运行
ps -p <PID> -o comm=,把<PID>换成那个号码,就能显示出App的名称。 - 停止那个App正在进行的音频相关活动,比如暂停的视频、打开的通话或录音,或者退出这个App。
- 再次运行
pmset -g assertions,确认这个条目已经消失。
Mac无法睡眠的常见原因
- 打开着音频或视频的浏览器标签页或App,即使已暂停或静音。
- 仍然开着麦克风或摄像头的视频通话App。
- 尚未完成的下载、上传、云同步和备份。
- 正在读取磁盘的App。Apple举的例子是“音乐”正在播放歌曲。
- 有人在使用你的Mac共享的服务,比如连接的打印机或共享文件。
- 一个活跃的终端会话,比如远程登录。
pmset中的ttyskeepawake设置会在会话使用期间阻止闲置睡眠。运行pmset -g | grep ttyskeepawake查看它,1表示打开。 - 一个你启动后忘掉的
caffeinate命令或防睡眠工具。
如何查看是什么唤醒了Mac
如果你的Mac睡眠后又醒了,电源日志会记录原因。运行pmset -g log | grep -e " Sleep " -e " Wake " -e " DarkWake " | tail -20,查看最近几次睡眠和唤醒。due to后面的文字就是原因,比如盖子、键盘或触控板,或者计划任务。
DarkWake行表示显示器关闭状态下的短暂唤醒,macOS用它来执行后台任务。一夜之间出现几次是正常的。
常见问题
活动监视器中的“防止睡眠”是什么意思?
它表示某个App此刻是否在阻止你的Mac睡眠。“是”表示这个App已请求macOS保持唤醒。
如何查看是什么在阻止Mac睡眠?
查看活动监视器“能耗”标签页中的“防止睡眠”列,或在“终端”中运行pmset -g assertions,查看所有让Mac保持唤醒的进程。
我可以有意让Mac保持唤醒吗?
可以。系统自带的caffeinate命令在运行期间会让Mac保持唤醒。按Control-C停止。
为什么coreaudiod会显示为正在防止睡眠?
coreaudiod负责为所有App处理声音,所以当某个App正在播放或录制音频时,它会持有睡眠断言。pmset -g assertions中的Created for PID行会告诉你是哪个App。
powerd在防止睡眠,这是坏事吗?
不是。powerd是macOS的电源管理进程,你在使用Mac时,它持有名为Prevent sleep while display is on的断言是正常的。
“终端”会话会让我的Mac保持唤醒吗?
会。ttyskeepawake设置打开时,只要有终端会话(比如远程登录)处于活跃状态,macOS就不会闲置睡眠。一个会话闲置的时间超过睡眠计时器后,就算作不活跃。用caffeinate运行的命令也会让Mac保持唤醒,直到命令完成。
相关条目
分步指南:Mac为什么无法睡眠。
想找比活动监视器更好的工具?请看Mac上最好用的活动监视器替代品,或者浏览术语表中的所有条目。