Por que o PPID do tmux é 1 no Ubuntu?

Por que o PPID do tmux é 1 no Ubuntu?

Fundo:

  • Conecte-se ao servidor Ubuntu via ssh
  • Execute o tmux e desanexe

Por que o PPID do tmux é 1? Alguma informação sobre o mecanismo de tempo de execução do tmux?

Responder1

tmuxé executado em uma arquitetura cliente-servidor. Sempre que você executa tmuxa partir de um shell, você executa um cliente que é filho do shell. (É possível executar tmuxa partir de um não-shell, por exemplo, diretamente do sshd, este detalhe não muda nada).

tmuxcliente tenta encontrar um tmuxservidor associado ao seu usuário. Se nenhum servidor for encontrado, às vezes o cliente irá reclamar (por exemplo, tmux attach-session) e às vezes iniciará um servidor (por exemplo, sole tmux, que é equivalente a tmux new-session) e então fará seu trabalho.

A função de qualquer tmuxcliente é conversar com o servidor e fazer com que ele faça alguma coisa.

Quando tmuxprecisa iniciar um servidor, ele faz clone(2)sozinho. O processo filho resultante clones imediatamente e sai. O processo mais novo se torna o tmuxservidor real eseu PPID é 1 porque seu pai morreu. Parece que a única tarefa do processo intermediário é “desconectar” o servidor de seus ancestrais.

Acho que pode funcionar com tmuxo servidor sendo filho imediato de algum tmuxcliente e ganhando PPID de 1 somente depois que o cliente morrer. Observe que o objetivo tmuxé ter um servidor que continue funcionando após o cliente original ser desconectado; portanto, se o servidor fosse filho de algum cliente, provavelmente ficaria órfão, mais cedo ou mais tarde. E como em geral tmuxo cliente pode ser executado a partir de qualquer shell ou outro processo, que pode tentar monitorar os filhos de seus filhos, enviar sinais para eles, etc., deixar o servidor órfão o mais rápido possível é uma coisa razoável a se fazer.

Portanto, o servidor obtém PPID 1 quase imediatamente. Cada shell ou outro processo executado tmuxé descendente do servidor. Depois de (re)anexar, você verá o que o cliente lhe mostra. O próprio cliente é filho do shell em que você o invocou (ou sshdqualquer outro). Ele conversa com o servidor, passa as teclas para ele, recebe informações sobre a aparência da janela e imprime os caracteres de acordo.

O servidor, uma vez iniciado, é executado até que todas as sessões sejam encerradas. Isso significa que, para encerrá-lo normalmente, você precisa encerrar todos os shells (ou outros processos) que são painéis.

Esta arquitetura explica porque o ambiente do primeiro invocado tmuxpode ser preservado, mas em geral o ambiente dos tmuxclientes pode não importar. O servidor começa como neto do primeiro tmux, portanto pode herdar o ambiente. Depois disso tudo depende do servidor. Enquanto o servidor estiver em execução, não haverá herança direta de nenhum cliente posterior porque nem o servidor nem os processos recém-gerados (painéis) são descendentes desse cliente. Veressa minha resposta.

informação relacionada