Una solución simple para esto es usar un autopipe. Abra una tubería y escriba periódicamente marcas de tiempo en ella. select
en este tubo para leer las marcas de tiempo y compararlas con la hora actual. Cuando hay una gran brecha, eso significa que acaba de despertarse de la suspensión del sistema o del modo de hibernación.
En cuanto a la inversa, no hay mucho tiempo cuando la tapa está cerrada y se gira el interruptor.
Si realmente necesita actuar en suspensión, necesitará establecer ganchos de ahorro de energía como este https://help.ubuntu.com/community/PowerManagement/ReducedPower en pm-utils. Podría ser tan simple como
kill -1 `cat mypid` ; sleep 1
Su proceso sería entonces trampa SIGHUP y hacer lo que hay que hacer para prepararse para la suspensión. El sueño retrasa el proceso el tiempo suficiente para que su programa reaccione a la señal.
Esto podría ser algo http://www.mjmwired.net/kernel/Documentation/power/freezing-of-tasks.txt – Kristofer
@Kristofer, gracias por la pista que he encontrado más apropiado: http: // www. mjmwired.net/kernel/Documentation/power/notifiers.txt Pero parece que solo es posible en el modo kernel pero necesito ser notificado en el espacio de usuario sin escribir ningún módulo kernel – ixSci