Определить, находится ли хост в спящем или бодрствующем состоянии в macOS

Контекст

Я разрабатываю сервис для macOS, который работает в фоновом режиме и периодически выполняет определенные задачи. Служба автоматически перезапускается launchd при сбое или при автоматическом обновлении.

Я заметил, что когда машина спит, она по-прежнему будет выполнять программы в течение 1 или 2 минут в час.

Цель

Моя цель — прерывать выполнение этих задач всякий раз, когда хост находится в состоянии сна. Для этого я обрабатываю уведомления о сне и пробуждении, которые система отправляет приложению (Apple Docs: регистрация и отмена регистрации для уведомлений о переходе в спящий режим и пробуждения).

Проблема

Проблема, которую я обнаружил, заключается в том, что если служба обновляется или перезапускается, когда система находится в спящем состоянии, служба запускается и предполагает, что состояние «бодрствует». Таким образом, он пытается запустить то, что не должен.

Мне интересно, есть ли способ запросить систему, находится ли она в состоянии «сна» или «бодрствует».


person Santiago Alessandri    schedule 06.03.2017    source источник
comment
Мои комментарии здесь могут помочь - не могу вспомнить результат... stackoverflow.com/q/32227580/2836621   -  person Mark Setchell    schedule 07.03.2017


Ответы (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
person Franc Jerez    schedule 17.01.2021
comment
Это хорошо, только что попробовал. Но говорит ли это только о том, что дисплей спит, а не весь Mac? - person Kubuntuer82; 18.03.2021
comment
Как ни странно, даже если вы выключите все внешние мониторы и закроете крышку ноутбука, состояние Display Sleep, похоже, не будет обнаружено (если ОС тоже не приостановлена/заблокирована). - person Franc Jerez; 19.03.2021