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

Trabajadores!

Como Conductor del Movimiento Nacional Justicialista, 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 nuestro Pueblo clama y merece. Los trabajadores
argentinos son la finalidad de todos mis desvelos, pero son también la
causa objetiva de mi propia felicidad.

Un sistema de cómputo no dpuede sustraerse de esta realidad cardinal.
Podemos decir señores, que para conducir un sistema 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 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, se hace imprescindible
contar en nuestro sistema con un comando específico que nos ayuda a
planificar, llamado jobs.

Conviene conocer en detalle sus particularidades ya que - como todo en
la vida - el apelativo de la acción depende de quién la realiza. Nuestro
sistema operativo cuenta con un núcleo Conductor, que es un Coronel y al
que ustedes llamarán Kernel. Este llevará a cabo los llamados Procesos,
con grupos de Tareas. [tose]. En tanto, nuestros obreros descamisados,
que operan como usuarios de cómputo, contarán con los anhelados Trabajos
o Jobs.

Estos trabajos pueden consistir en tres variantes: tanto la ejecución de
un comando único, o de varios comandos encadenados por medio de caños o
pipes, o bien la ejecución de un programa interactivo.

Pues bien señores, en particular en una terminal de Linux, bien podremos
desactivar o activar todo trabajo o programa activo, mediante el uso de
la combinación de teclas Ctrl+z. Al escoger este proceder, se detendrá
la ejecución del trabajo, y se lo enviará a un segundo plano
("background" o "bg"), reservándole memoria al mismo, 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 ejecució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 orden de
trabajo.En este ejemplo, podríamos querer 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érprete de comandos 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érprete de comandos utilizado). Esto puede ser
útil para otros entornos distintos a GNU con Linux o Ubuntu.

En consecuencia, trabajadores, 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".