GNU/Linux >> Tutoriales Linux >  >> Linux

Mantener un proceso de Linux en ejecución después de cerrar la sesión

Solución 1:

El mejor método es iniciar el proceso en un multiplexor terminal. Alternativamente, puede hacer que el proceso no reciba la señal HUP.

Un multiplexor de terminal proporciona terminales "virtuales" que se ejecutan independientemente del terminal "real" (en realidad, todos los terminales de hoy son "virtuales", pero ese es otro tema para otro día). La terminal virtual seguirá funcionando incluso si su terminal real se cierra con su sesión ssh.

Todos los procesos iniciados desde el terminal virtual seguirán ejecutándose con ese terminal virtual. Cuando te vuelvas a conectar al servidor podrás volver a conectarte a la terminal virtual y todo será como si nada hubiera pasado, salvo el tiempo que pasó.

Dos multiplexores de terminales populares son screen y tmux.

La pantalla tiene una curva de aprendizaje empinada. Aquí hay un buen tutorial con diagramas que explican el concepto:http://www.ibm.com/developerworks/aix/library/au-gnu_screen/

El terminal envía la señal HUP (o SIGHUP) a todos sus procesos secundarios cuando el terminal está cerrado. La acción común al recibir SIGHUP es terminar. Por lo tanto, cuando su sesión ssh se desconecte, todos sus procesos terminarán. Para evitar esto puedes hacer que tus procesos no reciban SIGHUP.

Dos métodos sencillos para hacerlo son nohup y disown .

Para obtener más información sobre cómo nohup y disown funciona lea esta pregunta y respuesta:https://unix.stackexchange.com/questions/3886/difference- between-nohup-disown-and

Nota:aunque los procesos seguirán ejecutándose ya no podrás interactuar con ellos porque ya no están conectados a ningún terminal. Este método es principalmente útil para procesos por lotes de larga ejecución que, una vez iniciados, ya no necesitan ninguna intervención del usuario.

Solución 2:

Hay algunas formas de hacer esto, pero la que encuentro más útil es usar GNU Screen.

Después de entrar, ejecuta screen . Esto iniciará otro shell ejecutándose dentro de la pantalla. Ejecute su comando, luego haga un Ctrl -a d .

Esto lo "desconectará" de la sesión de pantalla. En este punto, puede cerrar sesión o hacer cualquier otra cosa que desee.

Cuando desee volver a conectarse a la sesión de pantalla, simplemente ejecute screen -RD desde el indicador de shell (como el mismo usuario de uso que creó la sesión).

Solución 3:

En bash , el disown palabra clave se adapta perfectamente a esto. Primero, ejecute su proceso en segundo plano (o use & o ^Z luego escribe bg ):

$ wget --quiet http://server/some_big_file.zip &
[1] 1156

Al escribir jobs puede ver que el proceso todavía es propiedad del shell:

$ jobs
[1]+  Running  wget

Si tuviera que cerrar la sesión en este punto, la tarea en segundo plano también se eliminaría. Sin embargo, si ejecuta disown , bash separa el trabajo y permite que continúe ejecutándose:

$ disown

Puedes confirmar esto:

$ jobs
$ logout

Incluso puedes combinar el & y disown en la misma línea, como:

$ wget --quiet http://server/some_big_file.zip & disown
$ logout

Esto es mejor que ejecutar nohup en mi opinión porque no deja nohup.out archivos esparcidos por todo su sistema de archivos. Además, nohup debe ejecutarse antes de ejecutar el comando:disown se puede usar si decide más tarde que desea poner en segundo plano y separar la tarea.

Solución 4:

La herramienta nohup, disponible en la mayoría de las cajas de Linux, hará esto.

Solución 5:

Solo para ser exhaustivo, señalaré tmux, que tiene la misma idea básica que screen:

tmux pretende ser una alternativa moderna con licencia BSD a programas como GNU screen. Las características principales incluyen:

  • Una interfaz de comandos poderosa, consistente, bien documentada y fácilmente programable.
  • Una ventana se puede dividir horizontal y verticalmente en paneles.
  • Los paneles se pueden mover y cambiar de tamaño libremente, o se pueden organizar en diseños preestablecidos.
  • Compatibilidad con UTF-8 y terminales de 256 colores.
  • Copiar y pegar con múltiples búferes.
  • Menús interactivos para seleccionar ventanas, sesiones o clientes.
  • Cambie la ventana actual buscando texto en el objetivo.
  • Bloqueo de terminales, manualmente o después de un tiempo de espera.
  • Un código base con licencia BSD, limpio y fácilmente ampliable, en desarrollo activo.

Sin embargo, es aproximadamente infinitamente más fácil de buscar en Google.


Linux
  1. Linux:¿es el proceso el que tiene una terminal de control o es la sesión la que tiene una terminal de control?

  2. ¿Cómo reiniciar (o restablecer) un proceso en ejecución en Linux?

  3. ¿Cómo eliminar un proceso que se ejecuta en un puerto específico en Linux?

  4. Proceso de Linux en segundo plano - ¿Se detuvo en los trabajos?

  5. Evite que la tarea de Linux que se está ejecutando actualmente se elimine después de cerrar la sesión de SSH

Cómo enumerar los procesos en ejecución en Linux

Cómo enumerar los procesos en ejecución en Linux:una guía para principiantes

15 comandos de pantalla de Linux para gestionar sesiones de terminal

Cómo matar el proceso de ejecución de Linux en un puerto particular

Ejemplos de comandos de pantalla:Obtener el control de la terminal Linux / Unix

Cómo borrar la terminal en Linux {Borrar pantalla en Linux}