jueves, 31 de diciembre de 2020

¿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".

No hay comentarios:

Publicar un comentario