Como posso hibernar um aplicativo em execução?

14

Exemplo de caso de uso:

Eu corro o Chromium com algumas abas abertas e decido que não preciso acessar o aplicativo pelos próximos 20 minutos. A fim de economizar tempo de bateria do laptop, eu gostaria de hibernar (congelar) Chromium sem ter que fechar o aplicativo (reabrir e recarregar todas as guias requer tempo que eu gostaria de salvar por meio de hibernação).

    
por orschiro 17.04.2016 / 16:15

3 respostas

21

Você pode usar o comando killall para enviar um sinal SIGSTOP a todos os processos correspondentes a um determinado nome para congelá-los e, posteriormente, enviar SIGCONT da mesma maneira para descongelá-los novamente.

Primeiro, encontre 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 redimensionará nomes longos, portanto, o r está ausente. Mas isso não é um problema, pois você pode usar a conclusão de Tab para inserir o nome do processo que irá completá-lo automaticamente.

Em seguida, você envia o sinal SIGSTOP para todos os processos denominados chromium-browser da seguinte forma:

$ killall -s STOP chromium-browser 

A janela do Chromium ficará desativada como se não tivesse respondido. Bem, isso realmente ficou sem resposta, então isso era de se esperar. Você não pode interagir com a janela de qualquer forma agora (exceto pela barra de menu e minimizando etc. que é manipulada 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ê descongela o aplicativo simplesmente executando este comando que envia o sinal SIGCONT para os processos especificados:

$ killall -s CONT chromium-browser 

Às vezes, o congelamento de um aplicativo dessa maneira pode causar falha, por isso, certifique-se de que coisas importantes sejam salvas antes de congelar um aplicativo.

Em casos raros, até mesmo o ambiente de área de trabalho / gerenciador de janelas / qualquer outra coisa pode ficar sem resposta também. Neste caso você tem que descongelar a aplicação congelada através de um TTY:

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

    
por Byte Commander 17.04.2016 / 16:34
8

Para suspender, tente: killall -SIGTSTP chromium-browser

Se isso não funcionar, tente a versão forçada: killall -SIGSTOP chromium-browser .

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

    
por clocktown 17.04.2016 / 16:23
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 número que seja) 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.

Note que você precisa alterar 7166 onde for apropriado.

    
por grooveplex 17.04.2016 / 16:23