Простое решение этой проблемы - использовать самотрубку.Открывайте канал и периодически записывайте в него метки времени.select
на этом канале, чтобы прочитать метки времени и сравнить их с текущим временем.Когда есть большой разрыв, это означает, что вы только что проснулись от системного приостановления или режима гибернации.
Что касается обратного, не так много времени, когда крышка закрывается, и она нажимает на переключатель.
Если вам действительно нужно действовать в режиме ожидания, тогда вам нужно будет установить ловушки энергосбережения, такие как https://help.ubuntu.com/community/PowerManagement/ReducedPower в pm-utils.Это может быть так просто, как
kill -1 `cat mypid` ; sleep 1
Тогда ваш процесс перехватит SIGHUP и сделает то, что нужно сделать, чтобы подготовиться к приостановке.Спящий режим задерживает процесс достаточно долго, чтобы ваша программа реагировала на сигнал.