Уведомление о приостановке / возобновлении операций в Linux

Я работаю на встроенной платформе Linux.

Когда я сделаю "echo "mem" > /sys/power/state", система остановится.

Я знаю, что ядро ​​и драйвер могут знать, что операция приостановки идет. Но возможно ли, чтобы процесс или приложение в пользовательском пространстве могли получить уведомление о приостановке работы системы? Как?

Например, у меня есть приложение, которое непрерывно записывает "A" в буфер, начальный адрес которого задается драйвером устройства. Возможно ли, чтобы это приложение было уведомлено о том, что система приостановит работу, чтобы она могла заменить весь этот буфер на "B", чтобы при возобновлении работы драйвера все, что видит драйвер, было "B"?

Большое спасибо.

1 ответ

Я не уверен, полезно ли это, в частности, для вас, учитывая упоминание "встроенного", однако systemd может уведомить вас через DBus: https://www.freedesktop.org/wiki/Software/systemd/inhibit/

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

Тем не менее, одним из возможных подходов было бы добавить общую отправку или удаление сообщений netlink из функции приостановки / возобновления работы любого драйвера, которую вы можете изменить. Тем не менее, приложение может никогда не получить достаточно времени для его обработки, прежде чем оно будет заморожено, что может привести к гонке. Скажем, он получил сообщение о приостановке и завис до того, как смог его обработать. И после возобновления он будет обрабатывать сообщение о приостановке.

ИМО, лучше справиться со сценарием в драйвере. Оставьте пространство пользователя в покое.

Другие вопросы по тегам