Есть ли сигналы приостановки \ возобновления в Linux?

Мое приложение должно реагировать в режиме гибернации, чтобы оно могло выполнять некоторые действия при приостановке и другие действия при возобновлении. Я нашел несколько дистрибутивных способов достижения этого (Upower + DBus), но не нашел ничего универсального. Есть ли способ сделать это?

Спасибо!

1 ответ

Простое решение этой проблемы - использовать самотрубку. Открывайте канал и периодически записывайте в него метки времени. select на этой трубе, чтобы прочитать метки времени и сравнить их с текущим временем. Когда есть большой разрыв, это означает, что вы только что проснулись от приостановки системы или режима гибернации.

Что касается обратного, не так много времени, когда крышка закрыта, и она нажимает на переключатель.

Если вам действительно нужно действовать в режиме ожидания, тогда вам нужно будет установить хуки powersave, такие как https://help.ubuntu.com/community/PowerManagement/ReducedPower в pm-utils. Это может быть так же просто, как

kill -1 `cat mypid` ; sleep 1

Затем ваш процесс заманивает SIGHUP в ловушку и делает то, что нужно сделать, чтобы подготовиться к приостановке. Спящий режим задерживает процесс достаточно долго, чтобы ваша программа реагировала на сигнал.

Я считаю, что вы ищете сигналы SIGSTOP и SIGCONT. Вы можете отправить их в работающий процесс следующим образом:

kill -STOP pid
sleep 60
kill -CONT pid
Другие вопросы по тегам