首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在MacOS (或Linux)中,如何研究哪个进程会导致膝上型计算机睡眠模式中的唤醒?

在MacOS (或Linux)中,如何研究哪个进程会导致膝上型计算机睡眠模式中的唤醒?
EN

Stack Overflow用户
提问于 2020-04-11 11:08:57
回答 3查看 3.9K关注 0票数 6

我的MacBook会自发地从睡眠模式中苏醒过来,同时会有很高的扇形活动。

我想在RTC或电源设置中对此进行调查?或者通过进程等(使用一些进程/内核魔术!)

提示:它可能是由"rtcwake“管理的。

我甚至不确定这是预定的任务,还是WiFi唤醒的任务,还是其他的任务。

我不想猜测在Mojave中通常是什么原因。相反,我需要在我的MacOS (Mojave)上对此做一个系统的调查。与Linux相关的答案也很受欢迎。

这是关于系统待机,睡眠模式,暂停模式。(请注意,这与单个进程的站立和唤醒无关。整个笔记本电脑自动打开。)

EN

回答 3

Stack Overflow用户

发布于 2020-04-22 19:21:16

读取日志文件是调试问题的最佳方法。

因此,在终端中尝试这个命令来获取系统日志,这将告诉您“唤醒”历史记录。

代码语言:javascript
运行
复制
log show --style syslog | fgrep "Wake reason: EC.LidOpen"

要了解觉醒的原因:

macOS Sierra,Mojave,Catalina和更新版本

代码语言:javascript
运行
复制
log show |grep -i "Wake reason"

或者是MacOS El Capitan,Yosemite,小牛和更年长的

代码语言:javascript
运行
复制
syslog |grep -i "Wake reason"

这将看起来像:

代码语言:javascript
运行
复制
MacBookPro kernel[0] : Wake reason = OHC1
MacBookPro kernel[0] : Wake reason = PWRB
MacBookPro kernel[0] : Wake reason = EHC2
MacBookPro kernel[0] : Wake reason = OHC1

,那么这些唤醒原因代码是什么意思?

  • OHC:代表开放主机控制器,通常是USB或Firewire。如果您看到OHC1或OHC2,几乎可以肯定是外部USB键盘或鼠标唤醒了机器。
  • EHC:代表增强主机控制器的是另一个USB接口,但也可以是无线设备和蓝牙,因为它们也在Mac的USB总线上。
  • USB :一个USB设备唤醒了机器
  • LID0:,这实际上是你的MacBook或MacBook Pro的盖子,当你打开盖子,机器从睡梦中醒来。
  • PWRB : PWRB表示电源按钮,这是Mac上的物理电源按钮
  • RTC:实时时钟报警器,通常来自于按需唤醒服务,比如当你通过节能控制面板安排睡眠和在Mac上醒来时。它还可以来自启动设置、用户应用程序、备份和其他预定事件。

可能还有其他一些代码(如PCI、GEGE等),但以上是大多数人在系统日志中会遇到的代码。一旦你发现了这些代码,你就可以真正缩小导致Mac从睡眠中醒来的原因,这似乎是随机的。

希望这会有所帮助:)

票数 2
EN

Stack Overflow用户

发布于 2020-04-21 22:50:55

这个答案是基于Linux的,所以它可能并不严格适用于Mac。为了确定rtcwake是否负责您的MacOS唤醒,您可以用一个包装器脚本替换可执行文件(在我的Ubutnu中是/usr/sbin/rtcwake),该脚本留下了运行rtcwake的迹象。

代码语言:javascript
运行
复制
$ cd /usr/sbin/rtcwake
$ sudo mv rtcwake rtcwake_orig 

然后编写包含以下内容的脚本/usr/sbin/rtcwake

代码语言:javascript
运行
复制
#!/bin/bash
touch $HOME/rtcwake_ran
/usr/sbin/rtcwake_orig

脚本的变体将取决于您的shell。特别是,在最后一行中,您可能会以另一种方式运行rtcwake,以便不拥有进程(nohup / disown)。请参阅https://unix.stackexchange.com/questions/152310/how-to-correctly-start-an-application-from-a-shell

要检查唤醒的可能原因,您可以在/var/log查看各种相关日志。例如,syslog*acpi*。另见https://unix.stackexchange.com/questions/83036/where-is-the-log-for-acpi-events

你有wakeonlan

票数 1
EN

Stack Overflow用户

发布于 2020-04-24 03:00:43

在这里,我记录了我的系统方法。它大致是基于@vijay-rajpurohit的答案,并且是由@vijay-rajpurohit提出的,而这个答案又是基于@Robert @1431720的评论。请注意,根据下面所示的日志,最后的结果是特定于我的MacOS机器的。在您的MacOS中,这将是不同的。

在第一次尝试中,我首先使用:log show --style syslog | grep ...检查了日志,但是花费的时间太长了。在浏览了/var/log/wifi.log之后,我意外地检查了/var/log/ (我对/var/log/powermanagement/*.asl也很好奇)。

事实证明,这是最有用的:

  1. cat /var/log/wifi.log|grep -i "Wake reason"

然后找到这一行:(注意EC.位)

代码语言:javascript
运行
复制
Thu Apr 23 22:41:32.359 Info: <airportd[219]> _systemWokenByWiFi: System wake reason: <EC.ARPT>, was woken by WiFi

然后搜索EC.ARPT,我发现了以下命令:

  1. pmset -g log有用的统计“总体睡眠/唤醒自启动”。
  2. pmset -g assertions这个结果显示了这个问题的全部答案:
代码语言:javascript
运行
复制
2020-04-24 02:23:38 +0100 
Assertion status system-wide:
   BackgroundTask                 1
   ApplePushServiceTask           0
   UserIsActive                   1
   PreventUserIdleDisplaySleep    0
   PreventSystemSleep             0
   ExternalMedia                  0
   PreventUserIdleSystemSleep     0
   NetworkClientActive            0
Listed by owning process:
   pid 111(hidd): [0x0000200a000986a9] 00:00:00 UserIsActive named: "com.apple.iohideventsystem.queue.tickle.4295010950.3" 
   pid 85(apsd): [0x0003b830000b90bd] 00:00:10 ApplePushServiceTask named: "com.apple.apsd-waitingformessages-push.apple.com" 
Kernel Assertions: 0x100=MAGICWAKE
   id=504  level=255 0x100=MAGICWAKE mod=24/04/2020, 01:57 description=en0 owner=en0
Idle sleep preventers: IODisplayWrangler

简而言之,在一种系统的方法中,我根据日志搜索了以下关键字,并对每个关键字进行了搜索:

  • EC.ARPT (示例链接)
  • iohideventsystem (示例链接)
  • MAGICWAKE (示例链接)
  • ApplePushServiceTask (见下文)

大多数信息项目都是从pmset -g assertions的输出中产生的。例如,下面一行中的ApplePushServiceTask

代码语言:javascript
运行
复制
pid 85(apsd): [0x0003b830000b90bd] 00:00:10 ApplePushServiceTask named: "com.apple.apsd-waitingformessages-push.apple.com"

在我的特殊情况下(不是一般的解决方案),似乎有效的解决方案是禁用:使用/System/Library/LaunchDaemons/com.apple.apsd.plistlaunchctl。但是,除非您在安全模式下执行csrutil disable,否则无法执行此操作。我在这里不写指令,因为它需要小心,您需要稍后启用它。

(待更新)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61155792

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档