Crear, supervisar i matar processos (II)

En aquest post parlarem sobre multiplexors de terminals i aprendrem sobre GNU Screen i tmux, programes que amplien les capacitats de les nostres terminals.

Al món de l’electrònica, un multiplexor és un aparell que permet diferents entrades a una sola sortida. Llavors, en essència un multiplexor dona la capacitat de canviar entrades segons sigui necessari. Tot i ser programes diferents, tmux i screen tenen característiques comunes, com:

  • Qualsevol invocació resultarà en una o més sessions que inclouran almenys una finestra (les finestres contenen programes).

  • Les finestres es poden dividir en regions o panells.

  • Facilitat de control: les comandes s’executen amb combinacions de tecles.

  • Les sessions es poden separar de la terminal actual.

  • Permeten connexions de socket.

  • Tenen mode de còpia.

  • Són altament personalitzables.

Al principi d’Unix només hi havia una terminal a una computadora. GNU Screen es va crear per emular diferents pantalles independents en un mateix terminal físic.

Per invocar screen només hem de teclejar-ho al terminal. Veurem un missatge de benvinguda. Pressionem Espai o Enter i ens apareixerà un prompt. Tot i que sembli que no ha passat res, screen ha creat la seva primera sessió i finestra. Per veure totes les finestres fem Ctrl+a-w.

Per crear una nova finestra farem Ctrl+a-c.

Ara tenim dues finestres, però tenen el mateix nom. Per canviar-o, farem Ctrl+a-A i escriurem el nou nom.

Ara crearem una finestra donant nom des del principi:

$ screen -t UnaAltraFinestra

I per moure’ns entre finestres podem fer:

  • Ctrl+a-n

    Anem a la següent finestra. Amb Ctrl+a-p anem a l’anterior.

  • Ctrl+a-num

    Anem a la finestra número num.

  • Ctrl+a-*

    Llistem les finestres. Podem moure’ns amb les fletxes i seleccionar amb Enter.

Al treballar amb finestres, cal saber que:

  • Les finestres executen els programes de manera independent.

  • Els programes se segueixen executant encara que la finestra no sigui visible o s’hagi desconnectat la sessió de pantalla.

Per eliminar una finestra, finalitzem el programa que s’hi està executant. També podem utilitzar Ctrl+a-k mentre estem a la finestra per eliminar-la.

screen pot dividir una pantalla d’un terminal en diferents regions per acomodar les finestres. Es pot dividir en regions horitzontals (Ctrl+a-s) o verticals (Ctrl+a-|). Només veurem ‘–’ a la part inferior, significant que està buit.

Per moure’ns a la nova regió, Ctrl+a-Tab. Ara podem afegir una nova finestra.

  • Per moure’ns entre elles, Ctrl+a-Tab

  • Per acabar totes les regions menys la actual: Ctrl+a-Q

  • Per acabar la regió actual: Ctrl+a-x

  • Acabar una regió no acaba amb la seva finestra associada.

El que hem fet fins ara pertanyia a la mateixa sessió. Ara toca “jugar” amb sessions. Per veure les sessions podem fer screen -list o screen -ls. Això mostrarà el PID, nom i estat.

Per crear una nova sessió:

$ screen -S "Segona sessió"

La pantalla s’esborrarà i donarà un nou missatge. Al fer screen -ls veiem que s’ha creat. Per tancar una sessió, sortim de les finestres o escrivim screen -S SESSION_PID -X quit.

$ screen -S 675661 -X quit

Per desvincular una sessió de pantalla del terminal podem fer Ctrl+a-d.

Per revincular la sessió, podem fer screen -r SESSION-PID. Si només tenim una sessió podem fer només screen -r.

Algunes opcions importants:

  • -d -r

    Torna a connectar una sessió i, si cal, la desconnecta primer

  • -d -R

    Com -d -r però screen crearà la sessió si no existeix

  • -d -RR

    Com -d -R però utilitzarà la primera sessió si n’hi ha més d’una disponible

  • -D -r

    Torna a connectar una sessió. Si cal, desconnecta i tanca la sessió remotament primer

  • -D -R

    Si s’està executant una sessió, la reconnecta, sinó la crea i notifica a l’usuari

  • -D -RR

    Com -D -R però més fort

  • -d -m

    Inicia screen en mode independent, que crea una sessió però no s’hi vincula

  • -D -m

    Com -d -m però no bifurca un nou procés

GNU Screen té un mode còpia o Scrollback. Dins aquest mode podem moure el cursor dins la finestra actual i pel contingut del seu historial amb les fletxes del teclat.

Per fer-ho:

  1. Entrem al mode còpia/Scrollback: Ctrl+a-[

  2. Anar al principi del text que vol copiar (amb les tecles de fletxa)

  3. Marquem el fragment de text a copiar amb l’espai

  4. Anem el final amb les tecles de fletxa

  5. Marquem el final del fragment amb l’espai

  6. Anem a la finestra a elecció i enganxem el fragment amb Ctrl+a-]

L’arxiu de configuració del sistema per Screen és /etc/screen, però també podem utilitzar ~/screenrc a nivell d’usuari. Aquest arxiu conté 4 apartats principals:

  • SCREEN SETTINGS

  • SCREEN KEYBINDINGS

  • TERMINAL SETTINGS

  • STARTUP SCREENS

tmux va aparèixer l’any 2007 i és similar a screen, però amb algunes diferències importants:

  • Model client-servidor

  • Selecció interactiva de sessions, finestres i clients

  • La mateixa finestra pot estar vinculada a diverses sessions

  • Disponibilitat de dissenys de tecla vim i Emacs

  • Suport per terminals UTF-8 i 256 colors

Per invocar tmux ho fem escrivint tmux. Ens apareixerà un indicador de shell i una barra d’estat a la part inferior de la finestra:

[0] 0:zsh*                                                                                                                        "hp-pc" 08:54 14-ago-24

A més del hostname, hora i data, la barra dona el nom de sessió, número i nom de la finestra.

Per assignar noms de sessió i finestra al invocar tmux podem fer:

$ tmux new -s "LPI" -n "Window zero"

[LPI] 0:Window zero*                                                                                                              "hp-pc" 08:56 14-ago-24

El prefix de comanda per defecte de tmux és Ctrl+b. Per crear una nova finestra farem Ctrl+b-c, que ens portarà a un nou prompt.

Com que zsh és la shell que utilitzo en l’exemple, per defecte la finestra rep aquest nom. Si executem top, el nom serà top.

Podem canviar el noms de la finestra amb Ctrl+b-,.

Com amb Screen, per moure’ns entre finestres ho fem amb Ctrl+b-n i Ctrl+b-p. Per anar a un número farem Ctrl+b-número.

Per desfer-nos d’una finestra farem Ctrl+b-&.

La possibilitat de dividir finestres també la tenim a tmux, però en aquest les regions s’anomenen panells. Els panells són pseudo-terminals vinculats a una finestra, pel que si matem un panell matem la seva pseudo-terminal.

Per dividir una finestra en horitzontal fem Ctrl+b-h, i en vertical Ctrl+b-%.

Per moure’s entre panells podem fer-ho així:

Ctrl+b-fletxes Moure’s entre panells.

Ctrl+b-; Passar a l’últim panell actiu.

Ctrl+b-Ctrl+fletxes Canviar la mida del panell en una línia.

Ctrl+b-Alt+fletxes Canviar la mida del panell en 5 línies.

Ctrl+b-{ Intercanviar panells (actual a anterior).

Ctrl+b-} Intercanviar panells (actual a següent).

Ctrl+b-z Panell d’acostar/allunyar.

Ctrl+b-t tmux mostra un rellotge elegant dins el panell (per detenir, pressionem q).

Ctrl+b-! Convertir el panell en finestra.

Per llistar sessions a tmux podem fer Ctrl+b-s o tmux ls.

Per crear una nova sessió des d’una sessió actual, podem fer Ctrl+b i escriurem :new a l’indicador. Per canviar el nom de la sessió: Ctrl+b-$.

Per canviar la sessió utilitzarem Ctrl+b-s i especificarem la que volem amb les fletxes.

Per tancar una sessió, utilitzarem tmux kill-session -t SESSION-NAME.

Per vincular una sessió al terminal fem tmux attach -t SESSION-NAME (tmux a si només n’hi ha una), i per desvincular-la, Ctrl+b-d.

Per desvincular la sessió, podem fer Ctrl+b-D per seleccionar quin client desvincular i Ctrl+b-r per actualitzar la terminal del client.

tmux també té mode Scrollback, com screen. Però a tmux utilitza Ctrl+Espai per marcar l’inici de la selecció i Alt+w per copiar el text.

Els arxius de configuració estan a /etc/tmux.conf i a ~/tmux.conf. Quan s’inicia, tmux els utilitza si existeixen. També es pot forçar un altre arxiu de configuració amb el paràmetre -f.

I fins aquí el post d’avui. Si t’ha semblat útil pots deixar un comentari i compartir-lo. Ens veiem al següent!