¿Cómo puedo hibernar una aplicación en ejecución?

15

Ejemplo de caso de uso:

Ejecuto Chromium con un par de pestañas abiertas y decido que no necesito acceder a la aplicación durante los próximos 20 minutos. Para ahorrar tiempo de batería de la computadora portátil, me gustaría hibernar (congelar) Chromium sin tener que cerrar la aplicación (volver a abrir y volver a cargar todas las pestañas requiere tiempo que me gustaría ahorrar hibernando).

orschiro
fuente
1
Verifique la segunda respuesta aquí: stackoverflow.com/questions/2134771/… . Lo que pasa es que el cromo está usando muchos PID y esos son diferentes cada vez que lo abres ... pero detener el principal (el que tiene el ícono original en el administrador de procesos) parece estar funcionando bien.
GreggD
1
Si solo le importa Chromium y no otras aplicaciones, puede usar una extensión de Chromium diseñada para la administración de pestañas, como OneTab o Session Buddy .
Moshe Katz
Gracias, pero creo que la killallsolución es realmente elegante. :)
orschiro

Respuestas:

21

Puede usar el killallcomando para enviar una SIGSTOPseñal a todos los procesos que coincidan con un nombre dado para congelarlos y luego enviarlos de SIGCONTla misma manera para descongelarlos nuevamente.

Primero descubra el nombre del proceso 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

Tenga en cuenta que recortará nombres largos, por lo tanto, rfalta el. Pero esto no es un problema, ya que puede usar la Tabfinalización para ingresar el nombre del proceso que lo completará automáticamente.

Luego envía la SIGSTOPseñal a todos los procesos nombrados chromium-browserasí:

$ killall -s STOP chromium-browser 

La ventana de Chromium se atenuará como si no respondiera. Bueno, realmente no respondió, por lo que era de esperar. No puede interactuar con la ventana de ninguna manera ahora (a excepción de la barra de menú y la minimización, etc., que maneja el administrador de ventanas y no la aplicación en sí). Pero los eventos de hacer clic en los botones, etc. todavía se generan y se agregan a la cola de eventos de la aplicación, por lo que todos se procesarán a la vez cuando descongele la aplicación nuevamente.

Descongela la aplicación simplemente ejecutando este comando que envía la SIGCONTseñal a los procesos especificados:

$ killall -s CONT chromium-browser 

A veces, congelar una aplicación de esta manera puede hacer que se bloquee, así que asegúrese de guardar cosas importantes antes de congelar una aplicación.

En casos raros, incluso el entorno de escritorio / administrador de ventanas / cualquier otra cosa podría dejar de responder también. En este caso, debe descongelar la aplicación congelada a través de un TTY:

Presione Ctrl+ Alt+ F1para cambiar a TTY1. Se le pedirá que inicie sesión, así que ingrese su nombre de usuario y contraseña. Luego ejecute el comando para descongelar la aplicación de la misma manera que lo haría con su emulador de terminal normal. Después de eso, vuelva al escritorio (TTY7) usando Ctrl+ Alt+ F7y debería estar bien nuevamente.

Byte Commander
fuente
44
Desde que empezaste pgrep, podrías haber continuado conpkill
muru
1
Aunque SIGSTOPexiste el riesgo de que la aplicación falle , diría que es menor. A menudo lo he usado en Chromium, y no recuerdo que esa haya sido la razón de un accidente.
kasperd
He aprendido smtg nuevo! killall! ;-)
Fabby
8

Para suspender, intente: killall -SIGTSTP chromium-browser

Si esto no funciona, probar la versión contundente: killall -SIGSTOP chromium-browser.

De cualquier manera, para continuar usándolo killall -SIGCONT chromium-browser. Lo intenté con Firefox y funcionó. Sin embargo, tenga en cuenta que si hace clic en los botones de Chromium mientras está suspendido, ejecutará esas cosas una vez que continúe su ejecución.

ciudad del reloj
fuente
3
SIGSTOP / SIGCONT funciona para mí, solo necesito ingresar chromium-browsercomo nombre de proceso. +1
GreggD
1
O google-chromesi usa Google Chrome, ya que la diferencia es aparentemente confusa
cat
2

Puedes probar lo siguiente (en una Terminal):

ps aux | grep gedit

Entonces verás algo como esto:

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

Escriba el número 7166 (o el número que sea) y luego haga:

kill -STOP 7166

Eso suspenderá la ejecución del proceso. No liberará de inmediato la memoria utilizada, pero la memoria estará disponible para otros procesos si la necesitan.

Entonces hazlo

kill -CONT 7166 para trabajar con el programa nuevamente.

Tenga en cuenta que debe cambiar 7166 cuando corresponda.

grooveplex
fuente