¿Qué significa exactamente que una sesión "se ejecute en segundo plano"?

¿Qué significa exactamente que una sesión "se ejecute en segundo plano"?

Actualmente estoy usando un cliente SSH para conectarme con un servidor que usa mi laboratorio. Tenía una pregunta sobre el concepto de "sesión ejecutándose en segundo plano". Eché un vistazo a una pregunta en esta comunidad (¿Qué es un proceso en segundo plano?) pero siento que es un poco diferente de lo que me pregunto.

El servidor con el que estamos trabajando (no estoy seguro si es el servidor o la conexión a Internet) ha estado teniendo algunos problemas, como cuando dejamos un proceso ejecutándose durante la noche y regresamos por la mañana, las sesiones del shell están desconectadas.

Una solución que alguien sugirió es utilizar el programa.tmuxpara evitar este problema. Lo que el programa pretende hacer es desconectar una sesión para que, incluso si el servidor se desconecta, nuestro proceso no se vea afectado.

Me preguntaba, ¿qué significa exactamente que un proceso "se ejecute en segundo plano" como este? ¿Es la misma pregunta que vinculé anteriormente y simplemente no la entiendo correctamente? Además, ¿qué significa "adjuntar o desconectar" una sesión?

Supongo que mi confusión proviene del hecho de que no entiendo cómo se podría ejecutar una sesión cuando el shell se desconecta.

¡Gracias!

Respuesta1

Tienes dificultades con el concepto porque no existe tal concepto. Grupos de procesospuede estar en segundo plano o en primer plano. El concepto no se aplica asesiones, ni lo que el sistema operativo llama sesiones ni lo que tmuxllama sesiones, que son dos cosas muy diferentes.

Lo tmuxque hace es crear uno o más pseudo-terminales, que los programas que se ejecutan tmuxven como sus terminales de control (y, para empezar, entradas, salidas y errores estándar). Élmultiplexoresesos terminales internos en un soloexteriorterminal, que será el pseudo-terminal configurado por el servidor SSH en su máquina cuando inició sesión a través de SSH.

Hay dos tmuxprocesos, uno de larga duración.servidorque se conecta a los extremos traseros (es decir, lados "maestros", para usar una terminología que ya no está de moda) de todos esos pseudo-terminales internos, y unclienteese es el intermediario entre ese servidor y el terminal externo realizado. En realidad, puede haber varios clientes, pero esa es una complejidad que podemos pasar por alto aquí, ya que no cambia el punto.

ElservidorEl proceso existe siempre que quede al menos un pseudoterminal interno. Agrupa los pseudo-terminales en colecciones, que son las que tmuxllamansesiones. Esto no debe confundirse con lo que su sistema operativo llama una sesión (una colección de grupos de procesos y, opcionalmente, una terminal de control), o unsesióna través de SSH (entre el servidor SSH remoto y su cliente SSH local). "sesión" puede denotar muchas cosas diferentes. Tenga en cuenta que aquí lo califico de diversas formas con " tmux", "SSH" y "sistema operativo".

ElclienteEl proceso es transitorio y desaparece.desprendiéndosede la tmuxsesión y el servidor, con la pérdida de la conexión SSH. Cuando inicias sesión nuevamente con SSH, creas unnuevocliente quese vuelve a conectara (una tmuxsesión administrada por) el servidor, y ese nuevo cliente realiza la interfaz de usuario del tmuxservidor: todos losventanasen la tmuxsesión y la línea de estado, en el pseudoterminal nuevo para su nueva sesión de inicio de sesión SSH. Un cliente realiza una tmuxsesión a la vez, aquella a la que está conectado actualmente.

El proceso del cliente es parte de lo que el sistema operativo llama sesión, la sesión que está controlada por elexteriorPseudoterminal creado por su servidor SSH para iniciar sesión SSH. Está sujeto a la duración de la sesión del sistema operativo, que a su vez está sujeto a la duración de la sesión SSH, y puede estar en el grupo de procesos en segundo plano o en primer plano.de esa terminal exterior. Está (por lo tanto) sujeto acontrol de trabajo de shelldel shell de inicio de sesión de esa sesión SSH.

El proceso del servidor está completamente divorciado del terminal externo y sus sesiones del sistema operativo. No está sujeto a sus vidas. Esno ensus grupos de procesos en segundo plano o en primer plano. Su vida útil está determinada únicamente por la existencia continuada deinternoterminales, cuyas E/S sirve a tmuxlos clientes.

Hayinternoyexteriorterminales. Hayadjuntoyseparado tmuxsesiones, por extensión de los clientes que se conectan y desconectan de tmuxlos servidores. Hayactivoyinactivoventanas dentro de una tmuxsesión. El concepto de control de trabajos de shell defondoyprimer planono está involucrado.

Respuesta2

Se puede decir que los procesos Unix se "ejecutan en segundo plano" de dos maneras principales:

  1. Todavía está controlado por otro proceso como el caparazón. Esto es lo que sucede si usas el &operador en shells Bourne:

    sleep 10 &
    

    El shell ejecutará este sleepproceso en segundo plano, por lo que continuará ejecutándose, pero usted podrá interactuar con el símbolo del shell y ejecutar otros comandos. Si un programa que se ejecuta en segundo plano como este intenta leer cualquier entrada, se detendrá con la SIGTTINseñal.

    Sin embargo, lo más importante es que todavía pertenece al proceso de shell donde se inició y todavía está conectado al tty (el terminal donde se está ejecutando), y si el tty está cerrado (la conexión ssh se interrumpe y el shell sale), el El proceso se matará con SIGHUP.

    Esto se llama control de trabajos de shell: los procesos se pueden poner en segundo plano con &o bgo ^Zy volver al primer plano con fgy enumerarse con jobsy así sucesivamente. En realidad, está diseñado para poner en segundo plano temporalmente un comando mientras trabaja en otro, no para procesos de ejecución prolongada que deben estar seguros contra la salida del shell y la salida del terminal.

  2. Un proceso demoníaco. Este es un proceso que se separa por completo del proceso padre y de sus ttys. Tiene un nuevo grupo de procesos y un ID de sesión y su padre es PID 1 (normalmente init, aunque creo que en Linux moderno systemdha asumido esa función). Debido a que un proceso demonio no está controlado por el shell y no está adjunto a un tty, no se finaliza cuando el shell sale o se cierra el tty. Tiene que ser eliminado explícitamente por el sistema o el usuario. La mayoría de los sistemas Unix vienen con muchos demonios predeterminados para hacer todo tipo de cosas.

Esta es una explicación amplia y hay muchos detalles sobre el control de trabajos del shell y los procesos del demonio que no he mencionado.

Hay un programa llamado nohupque puede hacer que un programa se ejecute con (1) ignorar la SIGHUPseñal para que no salga cuando se cierre el tty. Esto no lo convierte en un verdadero demonio, pero es bueno para trabajos simples que solo generan salida y nunca requieren ninguna entrada.

tmux es un programa que se ejecuta como un demonio pero te permite ejecutar otros programas (shells o cualquier otra cosa) dentro de él. tmux es mucho más sofisticado nohup: puede ejecutar programas en pantalla completa y programas que requieren tanto entrada como salida. Debido a que es un demonio, no se elimina cuando el tty desaparece (por ejemplo, cuando se cae la conexión ssh).

En tmux, "adjunto" significa que tmux muestra uno o más de los procesos que se ejecutan dentro de él en una terminal. Puede "desconectar" tmux de ese terminal y luego "conectarlo" nuevamente a un terminal diferente. La desconexión ocurre automáticamente si la conexión ssh se cae o se interrumpe. Entonces puede cerrar su terminal y ssh, luego conectarse desde una terminal diferente y conectar tmux y todo queda como estaba.

información relacionada