Posso "hhibernate" un programma?

Sì, so che ibernazione di solito si applica a un computer. (Hibernate il suo significato memorizzando la memory del programma in disco e riuscendo a ripristinarla in modo coerente.)

Tuttavia, ibernazione di un programma può essere molto utile. Supponiamo che voglio svolgere un gioco, ma alcuni programmi come firefox, acrobat occorrono 500M di memory, quindi voglio liberarlo. Chiudere e poi avviare può richiedere molto tempo, soprattutto se i dati di session non possono essere memorizzati. Quindi, invece, vado a immobilizzarli. Così c'è qualche modo in grado di immaginare un programma?

C'è una questione relativa in merito a StackOverflow. È più correlata alla programmazione, ma la risposta principale accettata spiega perché ciò che si sta cercando di fare è difficile e offre un'alternativa valida.

Fondamentalmente, eseguire le tue applicazioni 'business' in un VM e mettere in pausa / in ibernazione / chiudere quando vuoi giocare.

Anche se questo non è un ibernazione reale, il process può essere sospeso. Si interrompe immediatamente i loops della CPU, ma ancora utilizzerà la memory. Fortunatamente, questa memory verrà sostituita a file di pagina, se dopo l'avvio di un'applicazione intensiva di memory, quindi non è un problema reale. Il process sospeso non può sopravvivere al riavvio \ disconnessione, ma questo sarà sufficiente per giocare un gioco.

Domande correlate: Sospendere / riprendere un process il modo più semplice?

Internamente, la sospensione del process potrebbe essere effettuata attraverso approcci diversi :

  • SospendiThread e ResumeThread coppia di funzioni.

  • Funzione NtSuspendProcess (non documentata ufficialmente) che è stata introdotta con Windows XP Sp0 e funziona da allora in each singola versione di sistema.

  • Interfaccia di debug fornita da Microsoft, utilizzando DebugActiveProcess e DebugActiveProcessStop . Quando un debugger si attacca a un process remoto, tutti i thread del bersaglio vengono immediatamente sospesi finché il debugger dà un segno per farli eseguire.

Sono disponibili diversi strumenti che possono sospendere i processi:

  • Process Monitor
  • PsSuspend
  • NtSuspendProcess

Inoltre, Resource Monitor ( Task ManagerPerformanceOpen Resource Monitor ) in Windows Vista e superiore può sospendere i processi \ ripristino:

Sorvegliante delle risorse

"Sospensione" un'applicazione non sarebbe più veloce di chiudere e riavviarlo, anche se il suo punto sui dati della session è valido. In generale non ci sarebbe molto se un vantaggio.

Dato che sei in Windows, puoi sempre creare due account utente e utilizzare la function di commutazione dell'account veloce nelle windows e utilizzare ciascuna di esse per diversi set di applicazioni. Poiché Windows abbastanza siberizza le altre sessioni aperte sul computer. Penso che sia così.