Enviar proceso al background o segundo plano


Icono de engranajes

En muchas ocasiones me ha surgido hacer esto; enviar los procesos a segundo plano por cualquier motivo, ya sea porque lo ejecuto desde un script y necesito continuar ejecutando líneas en el, porque estoy ejecutando un comando en un servidor y cuando se cierre la sesión necesito que el comando continue o porque quiero reutilizar la terminal en la que stoy escribiendo.

Aquí se explican técnicas para enviar el proceso al background una vez se ha iniciado el proceso o antes de iniciarlo. Es decir, por comandos de combinación de teclas o por añadiendo parámetros al comando original.

Nota:Teneis que sustituir el tag por el comando que necesiteis en vuesto caso.

Una vez iniciado el proceso

Poner el proceso en background

Has puesto un proceso a funcionar y necesitas seguir poniendo procesos en la misma consola.

1- Pondremos el proceso en stop momentaneo. Para eso pulsamos CRT+Z . Nos saldrá un mensaje en pantalla tal que así:

[1]+  Detenido    <comando>

Esto nos enseña primero, el número de proceso iniciado por la consola que se pone en stop ( [1] ) en este caso uno. Después lo que se ha efectuado, una detención. Y por último el mismo comando que hemos ejecutado.

2- Le decimos que ese proceso lo queremos en marcha pero en background, con el siguiente comando diciendole que el proceso/job es el número 1:

bg 1

Esto nos sacará la siguiente salida.

[1]+ <comando> &

Con esto nos dice que el comando ha sido puesto en background correctamente.

En el caso de que queráis ponerlo en primer plano otra vez es tan sencillo como ejecutar el siguiente comando especificando el número de proceso/job.

fg 1

Desasignar el proceso a nuestra sesión

El típico caso en el que inicias un proceso en la consola y te das cuenta de que el proceso tardará mucho y se te puede perder la sesión cuando estás, por ejemplo, conectado a un servidor.

Realizas los mismos pasos de antes, pero después del comando bg ejecutas el siguiente comando, en este caso para el proceso/job 1.

disown -h %1

Cuando se inicia el proceso

Recordad:Teneis que sustituir el tag por el comando que necesiteis en vuesto caso.

Poner el proceso en background

Simplemente añadimos un ampersand (&) al final del comando.

<comando> &

Este seria el equibalente al comando bg.

Poner el proceso en background y desasignar el proceso a nuestra sesión

Esto bloquea la señal SIGHUP (hangup) que emite el sistema a los procesos/jobs que pertenecen a nuestra sesión para que terminen. Con este comando evitaremos que se envie esta señal al proceso.

nohup <comando> &

Este seria el equibalente al comando disown.

Poner el proceso en background , desasignar el proceso a nuestra sesión y que sea silencioso

Aunque el proceso este en background y con el disown el sistema seguirá enviando las salidas estandar y de error a nuestra consola. Si queremos evitar esto para que no nos moleste enviaremos las dos salidas a /dev/null de la siguiente forma.

nohup <comando> > /dev/null 2>&1 &

De esta forma nos desvinculamos por siempre y de todo de este comando.