Comment mettre en veille prolongée une application en cours d'exécution?

15

Exemple d'utilisation:

Je lance Chromium avec quelques onglets ouverts et je décide que je n'ai pas besoin d'accéder à l'application pendant les 20 prochaines minutes. Afin d'économiser le temps de la batterie de l'ordinateur portable, je voudrais hiberner (geler) le chrome sans avoir à fermer l'application (la réouverture et le rechargement de tous les onglets nécessitent du temps que je voudrais économiser en l'hibernant).

orschiro
la source
1
Vérifiez la deuxième réponse ici: stackoverflow.com/questions/2134771/… . Le fait est que le chrome utilise de nombreux PID et ceux-ci sont différents à chaque fois que vous l'ouvrez ... mais arrêter le principal (celui avec l'icône d'origine dans le gestionnaire de processus) semble fonctionner correctement.
GreggD
1
Si vous ne vous souciez que de Chromium et pas d'autres applications, vous pouvez utiliser une extension Chromium conçue pour la gestion des onglets, comme OneTab ou Session Buddy .
Moshe Katz
Merci mais je trouve la killallsolution réellement très élégante. :)
orschiro

Réponses:

21

Vous pouvez utiliser la killallcommande pour envoyer un SIGSTOPsignal à tous les processus correspondant à un nom donné pour les figer et les envoyer ultérieurementSIGCONT la même manière pour les décongeler à nouveau.

Trouvez d'abord le nom du processus en utilisant 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

Notez qu'il supprimera les noms longs, donc il rmanque. Mais ce n'est pas un problème car vous pouvez utiliser la Tabcomplétion pour entrer le nom du processus qui le terminera automatiquement.

Ensuite, vous envoyez le SIGSTOPsignal à tous les processus nommés chromium-browsercomme ceci:

$ killall -s STOP chromium-browser 

La fenêtre Chrome va griser comme si elle ne répondait plus. Eh bien, cela ne répondait vraiment pas, alors c'était à prévoir. Vous ne pouvez plus interagir avec la fenêtre d'aucune façon maintenant (à l'exception de la barre de menus et de la réduction, etc., qui est gérée par le gestionnaire de fenêtres et non par l'application elle-même). Mais les événements de clic sur les boutons, etc. sont toujours générés et ajoutés à la file d'attente d'événements de l'application, ils seront donc tous traités en même temps lorsque vous décongelerez à nouveau l'application!

Vous décongelez à nouveau l'application en exécutant simplement cette commande qui envoie le SIGCONTsignal aux processus spécifiés:

$ killall -s CONT chromium-browser 

Parfois, le gel d'une application de cette manière peut entraîner son blocage. Assurez-vous donc que les éléments importants sont enregistrés avant de geler une application.

Dans de rares cas, même l'environnement de bureau / gestionnaire de fenêtres / quoi que ce soit d'autre peut également ne plus répondre. Dans ce cas, vous devez décongeler l'application gelée via un ATS:

Appuyez sur Ctrl+ Alt+ F1pour passer à TTY1. Il vous sera demandé de vous connecter, alors entrez votre nom d'utilisateur et votre mot de passe. Exécutez ensuite la commande pour décongeler l'application de la même manière que vous l'exécuteriez via votre émulateur de terminal normal. Après cela, revenez au bureau (TTY7) en utilisant Ctrl+ Alt+ F7et tout devrait bien se passer .

Byte Commander
la source
4
Depuis que vous avez commencé pgrep, vous auriez pu continuer avecpkill
muru
1
Bien que le risque de plantage de l'application SIGSTOPexiste, je dirais qu'il est mineur. Je l'ai souvent utilisé sur Chromium, et je ne me souviens pas que ce soit la raison d'un crash.
kasperd
J'ai appris smtg nouveau! killall! ;-)
Fabby
8

Pour suspendre, essayez: killall -SIGTSTP chromium-browser

Si cela ne fonctionne pas, essayez la version puissante: killall -SIGSTOP chromium-browser .

De toute façon, pour continuer à utiliser killall -SIGCONT chromium-browser. J'ai essayé avec Firefox et cela a fonctionné. Notez cependant que si vous cliquez sur des boutons dans Chromium alors qu'il est suspendu, il exécutera ce truc une fois que vous continuerez son exécution.

horloge
la source
3
SIGSTOP / SIGCONT fonctionne pour moi, il suffit de saisir le chromium-browsernom du processus. +1
GreggD
1
Ou google-chromesi vous utilisez Google Chrome, car la différence est apparemment déroutante
chat
2

Vous pouvez essayer ce qui suit (dans un terminal):

ps aux | grep gedit

Ensuite, vous verrez quelque chose comme ceci:

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

Notez le nombre 7166 (ou quel que soit le nombre), puis faites:

kill -STOP 7166

Cela suspendra l'exécution du processus. Il ne libérera pas immédiatement la mémoire qu'il utilise, mais la mémoire sera disponible pour d'autres processus s'ils en ont besoin.

Alors fais

kill -CONT 7166 pour travailler à nouveau avec le programme.

Notez que vous devez modifier 7166 le cas échéant.

grooveplex
la source