¿Por qué el PPID de tmux es 1 en Ubuntu?

¿Por qué el PPID de tmux es 1 en Ubuntu?

Fondo:

  • Conéctese al servidor Ubuntu a través de ssh
  • Ejecute tmux y separe

¿Por qué el PPID de tmux es 1? ¿Alguna información sobre el mecanismo de tiempo de ejecución de tmux?

Respuesta1

tmuxse ejecuta en una arquitectura cliente-servidor. Siempre que ejecuta tmuxdesde un shell, ejecuta un cliente que es hijo del shell. (Es posible ejecutar tmuxdesde un shell, por ejemplo, directamente desde sshd, este detalle no cambia nada).

tmuxEl cliente intenta encontrar un tmuxservidor asociado a su usuario. Si no se puede encontrar ningún servidor, a veces el cliente se quejará (p. ej. tmux attach-session) y otras iniciará un servidor (p. ej. sole tmux, que es equivalente a tmux new-session) y luego hará su trabajo.

El trabajo de cualquier tmuxcliente es hablar con el servidor y hacer que el servidor haga algo.

Cuando tmuxnecesita iniciar un servidor, lo hace clone(2)solo. El proceso hijo resultante clonevuelve a funcionar inmediatamente y luego sale. El proceso más nuevo se convierte en el tmuxservidor real ysu PPID es 1 porque su padre ha muerto. Parece que el único trabajo del proceso intermedio es "separar" el servidor de sus antecesores.

Creo que podría funcionar si tmuxel servidor es hijo inmediato de algún tmuxcliente y luego obtiene un PPID de 1 solo después de que el cliente muere. Tenga en cuenta que el objetivo tmuxes tener un servidor que siga ejecutándose después de desconectar el cliente original; por lo tanto, si el servidor era hijo de algún cliente, lo más probable es que, tarde o temprano, quedara huérfano de todos modos. Y debido a que, en general, tmuxel cliente se puede ejecutar desde cualquier shell u otro proceso, que puede intentar monitorear a los hijos de sus hijos, enviarles señales, etc., dejar huérfano el servidor lo antes posible es algo razonable.

Entonces el servidor obtiene un PPID de 1 casi de inmediato. Cada shell u otro proceso que ejecuta tmuxes descendiente del servidor. Después de (volver) a adjuntar, verá lo que le muestra el cliente. El cliente en sí es hijo del shell en el que lo invocó (o sshdlo que sea). Habla con el servidor, le pasa pulsaciones de teclas, recibe información sobre cómo debería verse la ventana e imprime los caracteres en consecuencia.

El servidor, una vez iniciado, se ejecuta hasta que se finalizan todas las sesiones internas. Esto significa que para finalizarlo correctamente, debe finalizar todos los shells (u otros procesos) que sean paneles.

Esta arquitectura explica por qué el entorno del primer invocado tmuxpuede conservarse pero, en general, el entorno de tmuxlos clientes puede no importar. El servidor comienza como nieto del primero tmux, por lo que puede heredar el entorno. Después de esto todo depende del servidor. Mientras el servidor se ejecute, no hay herencia directa de ningún cliente posterior porque ni el servidor ni los procesos (paneles) recién generados son descendientes de este cliente. Veresta respuesta mía.

información relacionada