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:
- su terminal de control está lleno de muchos datos de salida y mensajes de error/diagnóstico.
- en caso de que se cierre la terminal, el proceso junto con sus procesos secundarios se terminarán.
Para lidiar con estos dos problemas, debe separar por completo 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 siguiente ejemplo de comando tar, simplemente presione Ctrl+Z
para detenerlo, ingrese el comando bg
para continuar con su ejecución en segundo plano como un trabajo.
Puede ver todos sus trabajos en segundo plano escribiendo jobs
. Sin embargo, su stdin , salida estándar , 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 usando el signo &, &
firmar.
$ tar -czf home.tar.gz . & $ jobs
Mire el ejemplo a continuación, aunque el comando tar se inició como un trabajo en segundo plano, se envió un mensaje de error a la terminal, lo que significa que el proceso aún está conectado a la terminal de control.
$ tar -czf home.tar.gz . & $ jobs
Mantener los procesos de Linux en ejecución después de salir de la terminal
Usaremos disown comando, se usa después de que se haya iniciado un proceso 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 nunca más.
Además, cuando cierre la terminal de control, el trabajo no se colgará ni enviará un SIGHUP a cualquier trabajo secundario.
Lectura sugerida: 5 formas de mantener las sesiones y los procesos SSH remotos en ejecución
Echemos un vistazo al siguiente ejemplo del uso de diswon bash función integrada.
$ sudo rsync Templates/* /var/www/html/files/ & $ jobs $ disown -h %1 $ jobs
También puedes usar nohup
comando, 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
Separar un proceso 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 la interfaz gráfica de usuario (GUI ) aplicaciones como firefox:
$ firefox </dev/null &>/dev/null &
En Linux, /dev/null es un archivo de dispositivo especial que cancela (elimina) todos los datos escritos en él, en el comando anterior, la entrada se lee y la salida se envía a /dev/null .
Lectura sugerida: 10 ejemplos de comandos de pantalla para desconectar sesiones de terminal
Como comentario 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 una terminal de control, su proceso y los procesos secundarios se cancelará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.