Cómo iniciar el comando de Linux en segundo plano y desconectar el proceso en la terminal


En esta guía, sacaremos a la luz un concepto simple pero importante en el manejo de procesos en un sistema Linux, que es cómo separar completamente un proceso de su terminal de control.

Cuando un proceso está asociado con una terminal, pueden ocurrir dos problemas:

  1. su terminal de control está llena de tantos datos de salida y mensajes de error/diagnóstico.
  2. en el caso de que la terminal se cierre, el proceso junto con sus procesos secundarios finalizará.

Para hacer frente a estos dos problemas, debe desconectar totalmente un proceso de una terminal de control. Antes de pasar a resolver el problema, veamos brevemente cómo ejecutar procesos en segundo plano.

Cómo iniciar un proceso o comando de Linux en segundo plano

Si un proceso ya está en ejecución, como el ejemplo del comando tar a continuación, simplemente presione Ctrl + Z para detenerlo y luego ingrese el comando bg para continuar con su ejecución en el antecedentes como trabajo.

Puede ver todos sus trabajos en segundo plano escribiendo trabajos . Sin embargo, sus stdin, stdout, stderr todavía están unidos a la terminal.

$ tar -czf home.tar.gz .
$ bg
$ jobs

También puede ejecutar un proceso directamente desde el fondo utilizando el signo comercial, & .

$ tar -czf home.tar.gz . &
$ jobs

Mire el ejemplo a continuación, aunque el comando tar se inició como un trabajo en segundo plano, todavía se envió un mensaje de error al terminal, lo que significa que el proceso aún está conectado al terminal de control.

$ tar -czf home.tar.gz . &
$ jobs

Mantenga los procesos de Linux en ejecución después de salir de la terminal

Usaremos el comando disown, se usa después de que el proceso ha sido lanzado y puesto en segundo plano, su trabajo es eliminar un trabajo de shell de la lista de trabajos activos del shell, por lo tanto, no usará fg , bg comandos en ese trabajo en particular.

Además, cuando cierra la terminal de control, el trabajo no se bloqueará ni enviará un SIGHUP a ningún trabajo secundario.

Echemos un vistazo al siguiente ejemplo del uso de la función incorporada de diswon bash.

$ sudo rsync Templates/* /var/www/html/files/ &
$ jobs
$ disown  -h  %1
$ jobs

También puede usar el comando nohup , que también permite que un proceso continúe ejecutándose en segundo plano cuando un usuario sale de un shell.

$ nohup tar -czf iso.tar.gz Templates/* &
$ jobs

Desconectar un proceso de Linux de la terminal de control

Por lo tanto, para separar completamente un proceso de una terminal de control, use el formato de comando a continuación, esto es más efectivo para aplicaciones de interfaz gráfica de usuario (GUI) como Firefox:

$ firefox </dev/null &>/dev/null &

En Linux,/dev/null es un archivo de dispositivo especial que elimina (elimina) todos los datos escritos en él, en el comando anterior, la entrada se lee y la salida se envía a/dev/null.

Como observación final, siempre que un proceso esté conectado a un terminal de control, como usuario, verá varias líneas de salida de los datos del proceso, así como mensajes de error en su terminal. Nuevamente, cuando cierre la terminal de control, su proceso y los procesos secundarios terminarán.

Es importante destacar que, para cualquier pregunta o comentario sobre el tema, comuníquese con nosotros utilizando el formulario de comentarios a continuación.