6. Inicio y manipulación de procesos en segundo plano: el control de los jobs

Usted debe haber notado que cuando ingresa un comando desde una Terminal, normalmente tiene que esperar a que el comando termine antes que el shell le devuelva el control. Esto significa que Usted envió el comando en primer plano. Sin embargo, hay ocasiones donde esto no es deseable.

Suponga, por ejemplo, que Usted decidió copiar recursivamente un directorio grande a otro. Usted también decidió ignorar los errores, por lo que redirecciona el canal de error a /dev/null:

cp -R imagenes/ /shared/ 2>/dev/null

Un comando como ese puede tardar varios minutos para terminar su ejecución por completo. Entonces, Usted tiene dos soluciones: la primera es violenta y significa detener (terminar) el comando y volver a ejecutarlo más tarde cuando tenga el tiempo. Para hacer esto, presione las teclas Ctrl-C: esto le devolverá el prompt. Pero espere, ¡no lo haga! Siga leyendo.

Suponga que Usted quiere ejecutar el comando mientras hace otra cosa al mismo tiempo. Entonces, la solución es poner al proceso en segundo plano. Para hacer esto, presione las teclas Ctrl-Z para suspender al proceso:

$ cp imagenes/ shared/ 2>/dev/null
# Teclee C-z aquí
[1]+  Stopped                 cp -R imagenes/ /shared/ 2>/dev/null

y aquí está, de nuevo en el prompt. El proceso está entonces suspendido, esperando que Usted lo vuelva a iniciar (como muestra la palabra clave Stopped, detenido). Eso, por supuesto, es lo que Usted quiere hacer, pero en segundo plano. Ingrese bg (por BackGround, segundo plano) para obtener el resultado deseado:

$ bg
[1]+ cp -R imagenes/ shared/ 2>/dev/null &

Entonces, el proceso comenzará a ejecutar nuevamente como una tarea en segundo plano, como lo indica el signo & (ampersand) al final de la línea. Usted volverá al prompt y podrá continuar trabajando. Un proceso que corre como tarea en el fondo, o en segundo plano, se denomina job.

Por supuesto, Usted puede iniciar procesos directamente como tareas en segundo plano, precisamente agregando un caracter & al final del comando. Por ejemplo, Usted puede iniciar el comando para copiar el directorio en segundo plano escribiendo:

cp -R imagenes/ /shared/ 2>/dev/null &

Si Usted lo desea, también puede volver este proceso a un primer plano y esperar a que termine ingresando fg (ForeGround, primer plano). Para volverlo al segundo plano, ingrese la secuencia Ctrl-Z, bg.

Usted puede iniciar varios jobs de esta forma: entonces, se asignará un número de job a cada comando. El comando jobs del shell lista todos los jobs asociados al shell corriente. El job precedido por un signo + indica el último proceso iniciado como tarea de segundo plano. Para pasar a un job en particular al primer plano, Usted puede ingresar fg <n> donde <n> es el número de job, por ejemplo, fg 5.

Note que Usted también puede suspender o lanzar aplicaciones de pantalla completa (si es que están programadas correctamente) de esta forma, tales como less o un editor de texto como Vi, y pasarlos al primer plano cuando Usted lo desee.