在 macOS 中检测主机是处于"sleep"状态还是"awake"状态



上下文

我正在为MacOS开发一项在后台运行并定期执行某些任务的服务。launchd每当崩溃或自动更新时将自动重新启动该服务。

我注意到,当机器入睡时,它仍将在每小时1或2分钟内执行程序。

客观

我的目标是每当主机处于睡眠状态时中断这些任务的执行。为此,我正在处理睡眠并唤醒通知系统发送该应用程序(Apple Docs:注册和未注册以进行睡眠和唤醒通知)。

问题

我发现的问题是,如果服务已更新或在系统处于睡眠状态时它重新启动,则服务开始并假设状态为"醒着"。因此,它试图运行不应该的事情。

我想知道是否有办法在"睡眠"或"清醒"状态中查询系统。

您可以运行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

最新更新