Come posso ibernare un'applicazione in esecuzione?


15

Esempio di caso d'uso:

Corro Chromium con un paio di schede aperte e decido che non ho bisogno di accedere all'applicazione per i prossimi 20 minuti. Al fine di risparmiare il tempo della batteria del laptop, vorrei ibernare (congelare) Chromium senza dover chiudere l'applicazione (riaprire e ricaricare tutte le schede richiede tempo che vorrei risparmiare ibernandolo).


1
Controlla qui la seconda risposta: stackoverflow.com/questions/2134771/… . Il fatto è che il cromo sta usando molti PID e quelli sono diversi ogni volta che lo apri ... ma fermare quello principale (quello con l'icona originale nel gestore processi) sembra funzionare bene.
GreggD,

1
Se ti interessa solo Chromium e non altre applicazioni, puoi utilizzare un'estensione Chromium progettata per la gestione delle schede, come OneTab o Session Buddy .
Moshe Katz,

Grazie ma trovo la killallsoluzione davvero elegante. :)
Orschiro,

Risposte:


21

Puoi usare il killall comando per inviare un SIGSTOPsegnale a tutti i processi corrispondenti a un determinato nome per congelarli e successivamente inviare SIGCONTlo stesso modo per scongelarli di nuovo.

Per prima cosa scopri il nome del processo usando pgrep -l SEARCH_PATTERN :

$ pgrep -l chrom
13010 chromium-browse
13036 chromium-browse
13038 chromium-browse
13153 chromium-browse
13166 chromium-browse
13169 chromium-browse
13175 chromium-browse
13187 chromium-browse
13195 chromium-browse
13206 chromium-browse

Nota che taglierà i nomi lunghi, quindi il r manca. Ma questo non è un problema in quanto è possibile utilizzare il Tabcompletamento per inserire il nome del processo che lo completerà automaticamente.

Quindi si invia il SIGSTOPsegnale a tutti i processi denominatichromium-browser questo modo:

$ killall -s STOP chromium-browser 

La finestra di Chromium diventerà grigia come se non rispondesse. Bene, è diventato davvero insensibile, quindi era prevedibile. Non è possibile interagire con la finestra in alcun modo ora (ad eccezione della barra dei menu e della riduzione a icona, ecc. Che viene gestita dal gestore delle finestre e non dall'applicazione stessa). Ma gli eventi da clic sui pulsanti ecc. Vengono comunque generati e aggiunti alla coda degli eventi dell'applicazione, quindi saranno tutti elaborati immediatamente quando si scongela nuovamente l'applicazione!

Scongelare nuovamente l'applicazione semplicemente eseguendo questo comando che invia il SIGCONTsegnale ai processi specificati:

$ killall -s CONT chromium-browser 

A volte il blocco di un'applicazione in questo modo può causarne l'arresto anomalo, quindi assicurati che vengano salvate cose importanti prima di congelare un'applicazione.

In rari casi, anche l'ambiente desktop / gestore di finestre / qualsiasi altra cosa potrebbe non rispondere. In questo caso devi scongelare l'applicazione congelata tramite un TTY:

Premi Ctrl+ Alt+ F1per passare a TTY1. Ti verrà chiesto di accedere, quindi inserisci nome utente e password. Quindi esegui il comando per scongelare l'applicazione nello stesso modo in cui eseguiresti attraverso il tuo normale emulatore di terminale. Dopodiché torna al desktop (TTY7) usando Ctrl+ Alt+ F7e dovresti andare di nuovo bene.


4
Da quando hai iniziato pgrep, avresti potuto continuare conpkill
muru,

1
Sebbene SIGSTOPesista il rischio di crash dell'applicazione , direi che è minore. L'ho usato spesso su Chromium e non ricordo che sia mai stato il motivo di un incidente.
Kasperd,

Ho imparato smtg nuovo! killall! ;-)
Fabby,

8

Per sospendere, prova: killall -SIGTSTP chromium-browser

Se questo non funziona, prova la versione forzata: killall -SIGSTOP chromium-browser .

In entrambi i casi, per continuare a utilizzare killall -SIGCONT chromium-browser. Ho provato con Firefox e ha funzionato. Si noti tuttavia che se si fa clic sui pulsanti in Chromium mentre è sospeso, eseguirà quel materiale una volta continuata l'esecuzione.


3
SIGSTOP / SIGCONT funziona per me, basta inserire chromium-browseril nome del processo. +1
GreggD

1
O google-chromese usi Google Chrome, dal momento che la differenza è apparentemente confusa
cat

2

Puoi provare quanto segue (in un Terminale):

ps aux | grep gedit

Quindi vedrai qualcosa del genere:

barend    7166  5.3  1.0 722620 39044 ?        Sl   16:19   0:00 gedit

Annota il numero 7166 (o qualunque sia il numero) e poi fai:

kill -STOP 7166

Ciò sospenderà l'esecuzione del processo. Non libererà immediatamente la memoria utilizzata da essa, ma la memoria sarà disponibile per altri processi se ne hanno bisogno.

Quindi fa

kill -CONT 7166 per lavorare di nuovo con il programma.

Si noti che è necessario modificare 7166 dove appropriato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.