2011-05-26 8 views
5

Mi aplicación necesita reaccionar en modo de hibernación para que pueda hacer algo al suspender y otras acciones al reanudar. He encontrado algunas formas específicas de distribución para lograrlo (Upower + DBus) pero no encontré nada universal. ¿Hay una manera de hacerlo?¿Hay señales de suspensión/reanudación en Linux?

Gracias!

+2

Esto podría ser algo http://www.mjmwired.net/kernel/Documentation/power/freezing-of-tasks.txt – Kristofer

+0

@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

Respuesta

2

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.