我有一个通过 launchd 启动的守护进程。即使在 DarkWake 期间,它也会运行,并且在 OS X 再次返回 sleep 状态之前没有时间完成。
我可以想到以下解决方案,但没有找到实现此目的的方法。
不要让此守护进程在 DarkWake 期间运行。
我浏览了 Apple 文档和论坛,但没有找到任何相关引用。
在 DarkWake 期间,通过守护进程进程让操作系统等待直至其完成。
尝试在守护进程中调用 pmset noidle 和 caffeinate。它不起作用。 OS X 进入休眠状态。 OS X 似乎在 DarkWake 模式下抑制了许多通知的发送。
在守护进程中检测 DarkWake 模式。
没有找到任何解决方案/方法来检测 DarkWake 模式。
请帮忙。
最佳答案
也只是需要了解这些唤醒。
使用 log
实用程序,当系统自行唤醒时(即使没有激活 powernap),我可以看到这些行:
2019-04-11 22:18:00.622600+0200 0x250 默认 0x0 83 0 powerd: [powerd:sleepWake] vm.darkwake_mode: 1 -> 1
2019-04-11 22:18:00.625413+0200 0x250 默认 0x0 83 0 供电:[powerd:sleepWake] 由于 RTC/维护而从深度空闲 [CDN] 进行 DarkWake:
为了检测到这一点,类似这样的事情应该起作用:
log show --last 1m --predicate 'subsystem == "powerd"' | grep "DarkWake from Deep Idle"
或者,在脚本中使用咖啡因也可能有效(尚未对此进行测试)。
关于macos - 是否可以在 OSX 中检测 Power Nap/DarkWake 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32227580/