Recientemente he escrito varios artículos referentes a la ejecución de procesos en segundo plano. Pero no solo se trata de poder ejecutar un proceso en segundo plano, sino que además este proceso se quede en ejecución aún cuando hayas salido del terminal. Para este segundo caso, he estado utilizando nohup. Esta herramienta, precisamente te permitía independizar el proceso del terminal en el que lo estuvieras corriendo. Sin embargo, nohup, tiene algunas limitaciones, que pueden ser resueltas con otras herramientas. Entre esas herramientas que tienes a tu disposición se encuentra tmux, que es la aplicación a la que va dedicado precisamente este artículo.
No pienses que tmux solo sirve para independizar un proceso del terminal desde el que fue lanzado. tmux va mucho mas allá. Se trata de una potente herramienta que te permite tener varios terminales dentro de una sola pantalla. Es lo que se conoce como un multiplexor. Se trata de un terminal de terminales, es un concepto similar a Terminator, pero con algunas diferencias. Entre estas diferencias, la primera es que tmux puede ser ejecutado directamente en Terminator.
tmux.Mil terminales en uno
¿Para que necesitas varios terminales en uno?
Te respondo con otra pregunta ¿Que haces cuando tienes un proceso que lleva mucho tiempo?¿Te quedas sin terminal?¿Abres otro terminal? Si esta es tu opción, la de abrir otro terminal, puede ser que llegue un momento que tengas tantos terminales que no sepas ni por donde andas… Y, te puedo asegurar que, a mi, en ocasiones, me sucede.
Pero no solamente esto, ¿y si quieres dejar un proceso en segundo plano y cerrar el terminal y luego recuperarlo? Como te decía en la introducción, con nohup, puedes independizarlo de la sesión, pero no puedes recuperarlo en una sesión posterior. Así, de nuevo, la solución es tmux.
En este sentido, te tengo que decir, que últimamente, mi terminal está normalmente divido en dos paneles. En el panel de la derecha, normalmente suele encontrase vim, en el caso de que esté escribiendo un artículo o un tutorial, preparando un podcast o la presentación de un curso. Mientras, que en el panel de la izquierda, podrás encontrar desde una página de ayuda de man, a un terminal simple, para probar todos los ejemplos que incluyo en un tutorial.
tmux. Un gestor de ventanas para el terminal
tmux funciona exactamente como un gestor de ventanas y paneles. Así cada ventana es como una pestaña en Terminator, mientras que los paneles, no son mas que subdivisiones del terminal. Bueno, mejor expresado, son terminales dentro de un terminal. Como ya dije en el artículo sobre terminator, se trata de una aplicación para gobernar a todos los terminales. Pero tmux, tiene la ventaja, respecto a terminator, que te permite desacoplar la sesión del terminal, pudiendo recuperar esa sesión posteriormente.
Desacoplando terminal y sesión
Con el objeto de aterrizar esto de desacoplar terminal y sesión, y aprovechando el tutorial sobre scripts en Bash, te voy a poner un sencillo ejemplo, aunque de utilidad mas que dudosa. Se trata básicamente de que tengas una clara idea de que es y para que te puede servir esto de desacoplar terminal y sesión.
Escribe el siguiente script ejemplo.sh
ique lo único que hace es imprimir la fecha y hora cada segundo,
#!/bin/bash
while [ 1 -eq 1 ]
do
echo $(date)
sleep 1
done
Inicia el script ejecutando bash ejemplo.sh
. De inmediato, empezará a imprimir fecha y hora cada segundo. Detén este proceso con el atajo de teclado Ctrl+C
.
Abre otro terminal distinto, de forma que ahora tendrás dos terminales. En el pimero de los dos terminales ejecuta bash ejemplo.sh &
y en el segundo ejecuta ps -ef | grep ejemplo.sh
. Si lo haces tal y como te he indicado, verás que en este segundo terminal lo siguiente,
lorenzo 17131 16923 0 08:54 pts/1 00:00:00 bash ejemplo.sh
lorenzo 17285 17230 0 08:54 pts/3 00:00:00 grep --color=auto ejemplo.sh
Sin embargo, si cierras el primer terminal, en el que lanzaste la ejecución del script y vuelves a ejecutar ps -ef | grep ejemplo.sh
en el segundo terminal, verás que el proceso ya no existe.
Ahora, repite la operación con tmux. Para ello, en el primer terminal ejecuta tmux
. A continuación ejecuta bash ejemplo.sh
y a continuación utiliza el atajo de teclado Ctrl+b d
. Si ejecutas ps -ef | grep ejemplo.bash
, en el segundo terminal, verás que el proceso está en marcha. Si ahora cierras el primer terminal, y vuelves a ejecutar ps -ef | grep ejemplo.bash
verás, con gran gozo y satisfacción, que tu proceso sigue en marcha.
¿Como recuperarlo? Pues para recuperarlo es tan sencillo como ejecutar tmux a #
, suponiendo que es la última sesión que has abierto. Espectacular ¿no te parece?.
Por último, vuelve a desacoplar proceso y terminal con el atajo de teclado Ctrl+b d
. En el segundo terminal, comprueba que tu proceso sigue en funcionamiento utilizando para ello ps -ef | grep ejemplo.bash
. Ahora cierra todos los terminales, e incluso sal de la sesión. Vuelve a entrar y ejecuta el ps -ef
efectivamente, ahí está el proceso, es incombustible.
Gestión de sesiones
Lo que has estado probando en el apartado anterior, es, ni mas ni menos, que el control de sesiones. Se trata, de una forma sencilla, de separar entornos por completo. Así, las operaciones que podemos hacer con sesiones son las siguientes,
tmux new -s sesion
crea una nueva sesión detmux
etiquetada comosesion
.tmux attach -t sesion
se acopla a una sesión existente detmux
que hayas creado previamente con la etiquetasesion
.tmux switch -t sesion
cambia a una sesión existente etiquetada comosesion
.tmux list-sessions
muestra un listado de sesiones existentes.tmux detach
óCtrl+b d
desacopla la sesión existente del terminal.
Gestión de ventanas o pestañas
Como te he indicado anteriormente, tmux te permite crear ventanas dentro del propio terminal. De esta forma, en una misma sesión puedes tener varias ventanas con diferentes procesos corriendo en cada una de ellas. Puedes entender las ventanas como pestañas dentro de tmux. De hecho, es la mejor forma de entenderlo, y además las encontrarás en la parte inferior de tmux, indicándote cuantas pestañas tienes, y cual es la que estás utilizando en el momento.
Para saber en que ventana, pestaña, te encuentras, fíjate en la parte inferior, donde verás, que la pestaña en la que te encuentras está marcada con un asterisco.
Los atajos de teclado para utilizar con la gestión de ventanas o pestañas son los siguientes,
Ctrl+b c
crea una ventanaCtrl+b w
lista las ventanas que has creadoCtrl+b n
cambia a la siguiente ventanaCtrl+b p
cambia a la ventana previaCtrl+b [0-9]
te permite cambiar a esa ventana concreta.Ctrl+b f
te permite buscar las ventanas por el nombre.Ctrl+b ,
nombra una ventanaCtrl+b &
mata una ventana. No te preocupes que antes de matar la ventana te pide confirmación para hacerlo.
Gestión de paneles con tmux
Dentro de una misma ventana o pestaña, como prefieras llamarlo, puedes tener varios paneles. Inicialmente solo tendrás un panel, que se corresponderá con la totalidad de la pestaña. Puedes dividir este panel en dos ya sea vertical u horizontalmente, para ello, utilizarás Ctrl+b %
en el primer caso y Ctrl+b "
en el segundo de los casos. Así los atajos de teclado para la gestión de paneles son los siguientes,
Ctrl+b %
para dividir un panel en dos de forma vertical. Así tendrás dos paneles, uno al lado de otro.Ctrl+b "
te permite dividir un panel en dos de forma horizontal. Así tendrás dos paneles, uno encima de otro.Ctrl+b o
pasas al siguiente panel. El orden para pasar de un panel a otro es de acuerdo a los números que encontrarás al ejecutar el siguiente atajo de teclado.Ctrl+b q
muestra el número de orden de cada panel.Ctrl+b x
mata un panel. Antes de matar el panel te preguntará si efectivamente eso es lo que quieres hacer.Ctrl+b z
con este atajo de teclado conseguirás que un panel ocupe toda la ventana y al revés. Es como si pudieras activar y desactivar el zoom sobre un panel.Ctrl+b <espacio>
cambia entre diferentes disposiciones que tmux tiene definidas por defecto.
Un par de consejos
Para sacar provecho a tmux
es preciso conocer a fondo los atajos de teclado. Esto no es necesario que lo mencione. La mejor forma de aprender todos estos atajos de teclado es utilizándo los atajos de teclado. Sin embargo, no te fuerces a utilizar tmux
. Si todavía no le encuentras el que a esta herramienta, es que todavía no es el momento de hacer uso de ella. Ya llegará. Cuando llegue el momento, simplemente, recuerda este artículo, recupéralo y sácale partido.
Te puedo asegurar, que cuando necesites utilizar tmux
enseguida te harás a sus atajos de teclado, y aprenderás a manejarlo con soltura y facilidad.
Por otro lado, te recomiendo que la pruebes, que hagas el ejemplo que te he comentado en este artículo y juegues con él, para ver las posibilidades que te ofrece. Muchas veces, al menos este es mi caso, no utilizo una herramienta, porque simplemente no la conozco, o no la conozco con la suficiente profundidad, como para sacarle todo el partido que te ofrece.
Más información,