上下文
我正在开发一个在后台运行的macOS服务,并定期执行某些任务。
launchd
每当崩溃或自动更新时,服务都会自动重启。
我注意到当机器处于睡眠状态时,它仍会在每小时1或2分钟内执行程序。
目标
我的目标是在主机处于睡眠状态时中断这些任务的执行。 为此,我正在处理睡眠和唤醒通知,系统发送应用程序(Apple Docs: Registering and unregistering for sleep and wake notifications)。
问题
我发现的问题是,如果服务更新或在系统处于睡眠状态时重新启动,则服务启动并假定状态为“清醒”。 因此,它试图运行不应该运行的东西。
我想知道是否有办法查询系统是否处于“睡眠”或“清醒”状态。
答案 0 :(得分:1)
您可以运行 system_profiler SPDisplaysDataType
并解析输出以提取 Display Asleep
状态。
如果什么都没有发现,则系统处于唤醒状态。
Graphics/Displays:
NVIDIA GeForce GT 750M:
Chipset Model: NVIDIA GeForce GT 750M
Type: GPU
Bus: PCIe
PCIe Lane Width: x8
VRAM (Total): 2 GB
Vendor: NVIDIA (0x10de)
Device ID: 0x0fe9
Revision ID: 0x00a2
ROM Revision: 3776
Automatic Graphics Switching: Supported
gMux Version: 4.0.8 [3.2.8]
Metal Family: Supported, Metal GPUFamily macOS 1
Displays:
Color LCD:
Display Type: Built-In Retina LCD
Resolution: 2880 x 1800 Retina
Framebuffer Depth: 24-Bit Color (ARGB8888)
Mirror: Off
Online: Yes
Display Asleep: Yes
Automatically Adjust Brightness: Yes
Connection Type: Internal