¿Cómo creo trabajos y los administro en la terminal de Linux?

¡Trabajadores!

Como Conductor de nuestro Movimiento, he dedicado este año que termina a
atresar todas nuestras Organizaciones. En ello he estado acompañado por
el más fiel de los corazones: el del Pueblo Argentino.

Hemos acuñado un lema que remoza un viejo cuño, y nos orienta en la
labor que hemos de realizar para Grandeza de la Nación. Este lema ha
sido: "Gobernar es Crear Trabajo".

Responde a los inalienables Derechos que han alcanzan al hombre que
trabaja. Hemos creado ochocientos mil puestos de trabajo bajo la esfera
de dignificación que el Pueblo abheló y merece. Los trabajadores
argentinos son la finalidad de todos mis desvelos, pero son también la
causa inalterable de mi propia felicidad.

Un sistema de cómputo no debe ni puede sustraerse de esta realidad
cardinal. Podemos decir señores, que para conducir un sistema de cómputo
similar a UNIX, debemos crear trabajo.

Esto es así pues GNU con Linux responde como sistema operativo
multiusuario, pero también multitarea. Puede encargarse de realizar
múltiples acciones, destinando a ello la potencia de cómputo de su
Unidad Central de Proceso, compartida entre todos sus obreros. Toda
acción de cómputo que se lleve a cabo en un sistema multiusuario debe
realizarse de una sola manera: ¡en Comunidad y con Organización!

 

Para conducir esta organización del trabajo, contaremos en nuestro
sistema con un comando específico llamado jobs.

Conviene conocer en detalle ciertas particularidades. Como todo en la
vida, el nombre de la acción depende de quién la realiza. Nuestro
sistema operativo cuenta con un núcleo Conductor, que es un Coronel y
que ustedes llamarán Kernel. Este llevará a cabo los llamados Procesos,
con grupos de Tareas. [tose]. En tanto, los obreros, en tanto, contarán
con los llamados Trabajos o Jobs.

Estos trabajos pueden consistir en la ejecución de un comando o de
varios encadenados por medio de caños o pipes.

En particular en una terminal de Linux, bien podremos desactivar o
activar un trabajo o programa activo, mediante el uso de la combinación
de teclas Ctrl+z. Al hacerlo así, se detendrá la ejecución del trabajo,
y se lo enviará a un segundo plano ("background" o "bg"), reservándole
memoria del sistema, toda vez que se nos presenta nuevamente el
intérprete de comandos.

Por ejemplo, si estamos usando el editor GNU Nano, y presionamos Ctrl+z,
el trabajo de GNU Nano se detendrá y el sistema nos devolverá al
intérprete de comandos con un mensaje similar al siguiente:

Use «fg» para volver a nano. 
[1]+ Detenido   nano

Para recuperar en nuestra terminal el trabajo detenido que se encuentra
en el segundo plano, debemos traerlo al frente ("fg" o "foreground").
Esto se hace con el comando fg. Se presentará el trabajo anterior en la
terminal tal como lo habíamos dejado.

Si ejecutamos varios programas interactivos y los abandonamos, podríamos
encontrarnos con múltiples trabajos detenidos en el segundo plano. En
dicho caso, cada uno de ellos recibirá un identificador en la llamada
"cola de trabajos".

La cola de trabajos es precisamente eso: una lista o tabla donde
podremos observar y gestionar el número de orden de los trabajos en
segundo plano. Podremos verla mediante el comando:

jobs

...a lo cual el sistema nos debería devolver la cola de trabajos que
tenemos detenidos en segundo plano en nuestro sistema:

[1]   Detenido                nano
[2]-  Detenido                top

Se presentará en esta cola de trabajos el status de los mismos, y entre
corchetes, en orden de detención. Si fuese necesario tener un poco más
de detalles, podremos recurrir a la forma más larga y explícita de la
cola de trabajos usando jobs -l, que nos proporcionará también el
identificador de trabajo y el motivo de la detención.

[1]-  5950 Detenido (por una señal) nano
[2]+  5951 Detenido (por una señal) top

Si queremos traer un trabajo a primer plano y contamos con múltiples
trabajos detenidos en el segundo plano, se hará necesario especificar
cuál es el que queremos traer al primer plano mediante el número de
orden de detención. Por ejemplo, si quisiéramos traer top a primer plano
usaríamos:

fg %2

Para eliminar los programas, se suele usar la combinación Ctrl+c. Esto
detiene el programa y lo elimina de la cola de trabajos.

Indudablemente que este es un momento importante distinguir un hecho
importante. Si en lugar de emplear fg para traer un trabajo al primer
plano, abrimos nuevamente el mismo programa por segunda vez (en este
caso podría ser Nano), no recuperaremos el primero que ya teníamos en
memoria, sino que estaremos cargando una nueva instancia "desde cero" e
independiente del mismo, la cual se presentará en la terminal.

El trabajador debe tener derecho a la mejora de sus aptitudes
profesionales. Mejorar su conocimiento lleva un tiempo, pero le
permitirá lograr mejores resultados en menor tiempo a futuro. Esto es
determinante pues todo tiempo ahorrado, es tiempo ganado. La eficiencia
es un factor que no se puede soslayar en ningún momento. Es útil saber,
por lo tanto, que podríamos directamente colocar un trabajo en la cola
de trabajos a la hora de ejecutar su comando. Para ello simplemente le
agregamos el sufijo &.

Por ejemplo:

xeyes &

xeyes se activará y comenzará su acción típica, mostrar un par de ojos
que siguen el cursor del escritorio gráfico, independientemente de la
terminal del intérprete de comandos. Si en esta situación ingresamos el
comando jobs podríamos recibir:

[1]    Detenido    nano
[2]-   Detenido    mocp
[3]+   Ejecutando  xeyes &

Como vemos, el sufijo & permite hacer que el programa continúe en
ejecución. Esto es diferente a la detención y pase a segundo plano con
Ctrl+z.

Si usamos el comando fg %3 para activar en la terminal el programa
xeyes, simplemente se nos informará con la terminal detenida. Si usamos
ahora Ctrl+z, enviará a xeyes al segundo plano y detendrá su ejecucución
(podremos ver que los ojos están permanecen fijos en la última posición
antes de detenerse la ejecución del programa). Y en la cola de trabajos,
veremos que xeyes está "Detenido".

Si quisiéramos eliminar de memoria y de la cola de trabajos uno de
nuestros trabajos (ya sea que esté detenido o en ejecución), podremos
hacerlo mediante el comando kill % seguido del número de órden de
trabajo.En este ejemplo, podríamos quere cerrar xeyes con:

kill %3

En otros casos el ejemplo contrario podría ser lo procedente. ¿Que
sucede si ejecutamos en segundo plano xeyes (con xeyes &), y lo queremos
continuar utilizándolo, pero quitándolo de la cola de trabajos?.

Para ello se utiliza el comando disown. Este desacopla el último
programa en ejecución de la terminal. Si tenemos varios programas en la
cola de trabajos, los indicamos con:

disown  %número de orden

Otros modificadores nos ayudarán en condiciones complejas. Por ejemplo,
si usamos disown -a desacoplaremos todos los trabajos, en tanto que si
usamos disown -r desacoplaremos todos los trabajos en ejecución.

Debemos tener en cuenta que si abandonamos nuestra terminal con trabajos
en ejecución, los mismos se detendrán y se perderán. En ciertos casos,
sobre todo en el caso de abandonar terminales remotas, debemos enviarle
una señal SIGHUP ("colgar"), con el prefijo modificador -h.

Para ello usamos

disown -h

...para desacoplar todos los trabajos de la cola, o bien especificamos
alguno con:

disown -h %número de orden

Esto provocará que al abandonar la terminal remota con el comando exit
no se interrumpa la ejecución de los comandos remotos que dejamos en
ella.

Tengamos también en cuenta que en lugar de disown (dependiente del
intñerprete de comando Bourne BASH que dota Ubuntu, bien podríamos
utilizar el comando nohup para especificar que la señal de sistema
SIGHUP ("colgar") sea ignorada por cualquier comando de Linux o UNIX por
cualquier motivo (con independencia del intéprete de comandos
utilizado). Esto puede ser útil para otros entornos distintos a GNU con
Linux o Ubuntu.

En fin ttabajadores, sabemos que ciertos paradigmas informáticos podrían
intentar confluirse en la noción de formar un esclavo de consumo. Quien
quiera liberarse sabe bien lo que tiene que hacer: combatir al capital.
Los sistemas UNIX y similares a él - aunados a doctrinas de software
justo, libre, y soberano - permiten operar cómputo de forma completa y
comunitariamente organizada, sin depender de obsolescencias programadas
o softwares "cortados a cuchillo".