Wie kann ich eine laufende Anwendung in den Ruhezustand versetzen?

15

Anwendungsbeispiel:

Ich starte Chromium mit ein paar geöffneten Registerkarten und entscheide, dass ich in den nächsten 20 Minuten nicht auf die Anwendung zugreifen muss. Um Laptop-Akkulaufzeit zu sparen, möchte ich Chromium in den Ruhezustand versetzen (einfrieren), ohne die Anwendung schließen zu müssen (das erneute Öffnen und Laden aller Registerkarten erfordert Zeit, die ich durch den Ruhezustand einsparen möchte).

Orschiro
quelle
1
Überprüfen Sie die zweite Antwort hier: stackoverflow.com/questions/2134771/… . Die Sache ist, dass Chrom viele PIDs verwendet und diese bei jedem Öffnen unterschiedlich sind ... aber das Stoppen der Haupt-PID (die mit dem ursprünglichen Symbol im Prozess-Manager) scheint in Ordnung zu sein.
GreggD
1
Wenn Sie sich nur für Chrom und keine anderen Anwendungen interessieren, können Sie eine Chromium-Erweiterung verwenden, die für die Registerkartenverwaltung vorgesehen ist, z. B. OneTab oder Session Buddy .
Moshe Katz
Vielen Dank, aber ich finde die killallLösung tatsächlich sehr elegant. :)
Orschiro

Antworten:

21

Sie können den killallBefehl verwenden, um ein SIGSTOPSignal an alle Prozesse zu senden , die mit einem bestimmten Namen übereinstimmen, um sie einzufrieren und später auf SIGCONTdie gleiche Weise wieder aufzutauen.

Ermitteln Sie zuerst den Prozessnamen mit 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

Beachten Sie, dass lange Namen abgeschnitten werden, daher rfehlt das. Dies ist jedoch kein Problem, da Sie die TabVervollständigung verwenden können, um den Prozessnamen einzugeben, der automatisch vervollständigt wird.

Dann senden Sie das SIGSTOPSignal an alle Prozesse mit folgendem Namen chromium-browser:

$ killall -s STOP chromium-browser 

Das Chromium-Fenster wird ausgegraut, als ob es nicht mehr reagiert. Nun, es reagierte wirklich nicht mehr, also war das zu erwarten. Sie können jetzt in keiner Weise mit dem Fenster interagieren (mit Ausnahme der Menüleiste und des Minimierens usw., die vom Fenstermanager und nicht von der Anwendung selbst verwaltet werden). Die Ereignisse durch Klicken auf Schaltflächen usw. werden jedoch weiterhin generiert und der Ereigniswarteschlange der Anwendung hinzugefügt, sodass sie alle gleichzeitig verarbeitet werden, wenn Sie die Anwendung erneut auftauen!

Sie tauen die Anwendung erneut auf, indem Sie einfach diesen Befehl ausführen, der das SIGCONTSignal an die angegebenen Prozesse sendet :

$ killall -s CONT chromium-browser 

Manchmal kann das Einfrieren einer Anwendung auf diese Weise zum Absturz führen. Stellen Sie daher sicher, dass wichtige Daten gespeichert sind, bevor Sie eine Anwendung einfrieren.

In seltenen Fällen reagiert auch die Desktop-Umgebung / der Window Manager / was auch immer nicht mehr. In diesem Fall müssen Sie die eingefrorene Anwendung mit einem TTY auftauen:

Drücken Sie Ctrl+ Alt+ F1zu TTY1 wechseln. Sie werden aufgefordert, sich anzumelden. Geben Sie daher Ihren Benutzernamen und Ihr Passwort ein. Führen Sie dann den Befehl aus, um die Anwendung auf die gleiche Weise wie über Ihren normalen Terminalemulator zu starten. Danach kehren Sie mit Ctrl+ Alt+ zum Desktop (TTY7) zurück F7und Sie sollten wieder in Ordnung sein.

Byte Commander
quelle
4
Seit du angefangen hast pgrep, hättest dupkill
muru am
1
Das Risiko, dass die Anwendung abstürzt SIGSTOP, ist gering. Ich habe es schon oft bei Chromium verwendet und erinnere mich nicht, dass dies jemals der Grund für einen Absturz war.
Kasperd
Ich habe smtg neu gelernt! killall! ;-)
Fabby
8

Versuchen Sie zum Anhalten Folgendes: killall -SIGTSTP chromium-browser

Wenn dies nicht funktioniert, versuchen Sie die kraftvolle Version: killall -SIGSTOP chromium-browser.

So oder so, um die Verwendung fortzusetzen killall -SIGCONT chromium-browser. Ich habe es mit Firefox versucht und es hat funktioniert. Beachten Sie jedoch, dass beim Klicken auf Schaltflächen in Chromium im angehaltenen Zustand diese Informationen ausgeführt werden, sobald Sie mit der Ausführung fortfahren.

Clocktown
quelle
3
SIGSTOP / SIGCONT funktioniert bei mir, muss nur chromium-browserals Prozessname eingegeben werden. +1
GreggD
1
Oder google-chromewenn Sie Google Chrome verwenden, da der Unterschied anscheinend verwirrend ist
Katze
2

Sie können Folgendes versuchen (in einem Terminal):

ps aux | grep gedit

Dann siehst du so etwas:

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

Notieren Sie sich die Nummer 7166 (oder was auch immer es ist) und machen Sie dann:

kill -STOP 7166

Dadurch wird die Ausführung des Prozesses unterbrochen. Es wird nicht sofort den von ihm verwendeten Speicher freigeben, aber der Speicher wird für andere Prozesse verfügbar sein, wenn sie es benötigen.

Dann mach

kill -CONT 7166 wieder mit dem Programm arbeiten.

Beachten Sie, dass Sie 7166 gegebenenfalls ändern müssen.

grooveplex
quelle