2011-05-26 20 views
5

La mia applicazione deve reagire in modalità ibernazione in modo che possa intervenire sulla sospensione e altre azioni al ripristino. Ho trovato alcuni modi distributivi specifici per raggiungerlo (Upower + DBus) ma non ho trovato nulla di universale. C'è un modo per farlo?Ci sono segnali di sospensione/ripresa in Linux?

Grazie!

+2

Questo potrebbe ape qualcosa http://www.mjmwired.net/kernel/Documentation/power/freezing-of-tasks.txt – Kristofer

+0

@Kristofer, grazie per indizio che ho trovato più appropriata: http: // www. mjmwired.net/kernel/Documentation/power/notifiers.txt Ma sembra che sia possibile solo nella modalità kernel ma ho bisogno di essere notificato nello spazio utente senza scrivere alcun modulo del kernel – ixSci

risposta

2

Una soluzione semplice consiste nell'utilizzare un tubo automatico. Aprire una pipe e scrivere periodicamente timestamp ad essa. select su questa pipe per leggere i timestamp e confrontarli con l'ora corrente. Quando c'è un grande divario, significa che ti sei appena svegliato dalla sospensione del sistema o dalla modalità di ibernazione.

Come per il contrario, non c'è molto tempo quando il coperchio è chiuso e gira l'interruttore.

Se è davvero necessario agire in modalità sospensione, è necessario impostare i ganci powersave come questo https://help.ubuntu.com/community/PowerManagement/ReducedPower in pm-utils. Potrebbe essere semplice come

kill -1 `cat mypid` ; sleep 1 

Il vostro processo sarebbe quindi trappola SIGHUP e fare ciò che deve essere fatto per preparare la sospensione. Il sonno ritarda il processo abbastanza a lungo da consentire al programma di reagire al segnale.