1. Introducción a los entornos de trabajo UNIX

1.10. Gestión básica de procesos

1.10.4. Gestión de procesos en segundo plano y primer plano

Si estáis trabajando con Gnu/Linux a través de una red o desde un terminal con una pantalla que solo permite entrada de texto sin soporte gráfico, es posible que solo tengáis acceso a la shell. Si estáis acostumbrados a trabajar en un entorno gráfico en el que puedes tener varios programas abiertos al mismo tiempo y cambiar entre ellos, la interfaz de la shell puede parecer limitada.

Sin embargo, aunque la shell bash no tiene una interfaz gráfica para ejecutar varios programas al mismo tiempo, sí permite mover los programas activos entre el fondo y el primer plano. Esto permite tener varios procesos en ejecución y seleccionar el que queremos manejar en ese momento.

Podemos poner un programa en segundo plano de varias maneras. Una forma es agregar el símbolo & al final de la línea de comando cuando lo ejecutamos por primera vez o podemos usar el comando at para ejecutar comandos de manera que no estén conectados a la shell.

Para detener un comando en ejecución y ponerlo en segundo plano, presionad Ctrl+Z. Después de detener el comando, podéis volver a ejecutarlo en primer plano con el comando fg o iniciarlo en segundo plano con el comando bg. Es importante tener en cuenta que cualquier comando en ejecución en segundo plano puede generar salida durante los comandos que ejecutéis posteriormente desde esa shell. Por ejemplo, si aparece salida de un comando en segundo plano durante una sesión de vi, simplemente presionad Ctrl+L para refrescar la pantalla y deshaceros de la salida.

Si tenéis programas que deseáis ejecutar mientras continuáis trabajando en la shell, podéis colocar los programas en segundo plano. Para colocar un programa en segundo plano en el momento en que se ejecuta el programa, escribid un ampersand (&) al final de la línea de comando, así:

$ find /usr > /tmp/fichero-usuarios &
[3] 15971

Este ejemplo de comando encuentra todos los archivos en el sistema Gnu/Linux (a partir de /usr), imprime esos nombres de archivo y los coloca en el archivo /tmp/fichero-usuarios. El ampersand (&) ejecuta esa línea de comando en segundo plano. Observad que se muestra el número de trabajo [3] y el número de identificación de proceso, 15971, cuando se lanza el comando. Para comprobar qué comandos tenéis en ejecución en segundo plano, usad el comando jobs, así:

$ jobs
[1] Stopped (tty output) vi /tmp/unficherocualquiera

[2] Running find /usr -print > /tmp/allusrfiles &

[3] Running nroff -man /usr/man2/* >/tmp/man2 &

[4]- Running nroff -man /usr/man3/* >/tmp/man3 &

[5]+ Stopped nroff -man /usr/man4/* >/tmp/man4

Se pueden traer cualquiera de los comandos de la lista de trabajos al primer plano. Para hacer referencia a un trabajo en segundo plano (para cancelarlo o llevarlo al primer plano), usad un signo de porcentaje (%) seguido del número de trabajo. Para editar el archivo unficherocualquiera nuevamente, escribid:

$ fg %1

Como resultado, el comando vi y el terminal que lo contiene se abre de nuevo. Todo el texto es como estaba cuando detuvisteis el trabajo de vi. Antes de poner un procesador de texto, un procesador de palabras u otro programa similar en segundo plano, asegúraos de guardar vuestro archivo. Es fácil olvidar que tenemos un programa en segundo plano y perderíais vuestros datos si cerráis la sesión o reiniciáis el ordenador.

Si un comando se detiene, puedes hacer que se ejecute de nuevo en segundo plano utilizando el comando bg. Por ejemplo, tomad el trabajo número 5 de la lista de trabajos del ejemplo anterior. Escribid lo siguiente:

$ bg %5

Después de eso, el trabajo se ejecutará en segundo plano. Su entrada en la lista de trabajos aparecerá así:

[5] Running nroff -man man4/* >/tmp/man4 &