Como posso hibernar um aplicativo em execução?

15

Exemplo de caso de uso:

Executo o Chromium com algumas guias abertas e decido que não preciso acessar o aplicativo pelos próximos 20 minutos. Para economizar o tempo de bateria do laptop, eu gostaria de hibernar (congelar) o Chromium sem precisar fechar o aplicativo (reabrir e recarregar todas as guias requer tempo que eu gostaria de economizar ao hibernar).

orschiro
fonte
11
Verifique a segunda resposta aqui: stackoverflow.com/questions/2134771/… . O problema é que o cromo está usando muitos PIDs e esses são diferentes toda vez que você o abre ... mas parar o principal (aquele com ícone original no gerenciador de processos) parece estar funcionando bem.
precisa saber é o seguinte
11
Se você se preocupa apenas com o Chromium e não com outros aplicativos, pode usar uma Extensão do Chromium projetada para o gerenciamento de guias, como o OneTab ou o Session Buddy .
Moshe Katz
Obrigado, mas acho a killallsolução realmente elegante. :)
orschiro

Respostas:

21

Você pode usar o killallcomando para enviar um SIGSTOPsinal a todos os processos correspondentes a um determinado nome para congelá-los e, posteriormente, enviar SIGCONTda mesma maneira para descongelá-los novamente.

Primeiro descubra o nome do 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

Observe que ele irá aparar nomes longos, portanto, restá faltando. Mas isso não é um problema, pois você pode usar a Tabconclusão para inserir o nome do processo, que será concluído automaticamente.

Então você envia o SIGSTOPsinal para todos os processos nomeados chromium-browserassim:

$ killall -s STOP chromium-browser 

A janela do Chromium ficará acinzentada como se não respondesse. Bem, realmente ficou sem resposta, então isso era de se esperar. Você não pode interagir com a janela de forma alguma agora (exceto a barra de menus e a minimização, etc., que são gerenciadas pelo gerenciador de janelas e não pelo próprio aplicativo). Mas os eventos de clicar nos botões etc. ainda são gerados e adicionados à fila de eventos do aplicativo, para que todos sejam processados ​​de uma só vez quando você descongelar o aplicativo novamente!

Você derrete o aplicativo novamente simplesmente executando este comando que envia o SIGCONTsinal para os processos especificados:

$ killall -s CONT chromium-browser 

Às vezes, o congelamento de um aplicativo dessa maneira pode causar uma falha, portanto, verifique se coisas importantes foram salvas antes de congelar um aplicativo.

Em casos raros, até o ambiente da área de trabalho / o gerenciador de janelas / qualquer outra coisa também pode deixar de responder. Nesse caso, você precisa descongelar o aplicativo congelado por meio de um TTY:

Pressione Ctrl+ Alt+ F1para mudar para TTY1. Você será solicitado a fazer login, então digite seu nome de usuário e senha. Em seguida, execute o comando para descongelar o aplicativo da mesma maneira que o executaria no emulador de terminal normal. Depois disso, volte para a área de trabalho (TTY7) usando Ctrl+ Alt+ F7e você ficará bem novamente.

Byte Commander
fonte
4
Desde que você começou com pgrep, você poderia ter continuado compkill
Muru
11
Embora SIGSTOPexista o risco de o aplicativo travar , eu diria que é menor. Costumo usá-lo no Chromium e não me lembro de ter sido o motivo de uma falha.
kasperd
Eu aprendi smtg novo! killall! ;-)
Fabby
8

Para suspender, tente: killall -SIGTSTP chromium-browser

Se isso não funcionar, tente a versão enérgica: killall -SIGSTOP chromium-browser.

De qualquer maneira, para continuar usando killall -SIGCONT chromium-browser. Eu tentei com o Firefox e funcionou. Observe, no entanto, que se você clicar nos botões do Chromium enquanto estiver suspenso, ele executará essas coisas assim que você continuar a execução.

relógio
fonte
3
SIGSTOP / SIGCONT funciona para mim, basta entrar chromium-browsercomo o nome do processo. 1
GreggD
11
Ou google-chromese você usa o Google Chrome, já que a diferença é aparentemente confusa
gato
2

Você pode tentar o seguinte (em um terminal):

ps aux | grep gedit

Então você verá algo assim:

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

Anote o número 7166 (ou qualquer que seja o número) e faça:

kill -STOP 7166

Isso suspenderá a execução do processo. Ele não liberará imediatamente a memória usada por ele, mas a memória estará disponível para outros processos, se necessário.

Então faça

kill -CONT 7166 para trabalhar com o programa novamente.

Observe que você precisa alterar 7166, onde apropriado.

grooveplex
fonte