Quando o tmux sai (fecha o pty master), os processos de segundo plano dos scripts de inicialização morrem - por quê?

0

Estou tendo dificuldade em entender uma resposta que recebi para uma pergunta que fiz sobre o tmux - especificamente, re: o que o pseudo-terminal faz com processos infantis quando ele sai.

Pergunta original

Eu arquivei um problema no rastreador de problemas do GitHub do tmux :

I've observed the following behavior in tmux: if I launch a background process from within a shell startup script (e.g., .bashrc or .profile) like so

# ~/.bashrc

if [ -n "$TMUX" ]; then
  sleep 100 &
fi

then this process is killed as soon as tmux exits. That is, after launching tmux, 1) I can pull up the PID with pgrep sleep; 2) I can still see it after detaching from the tmux session; but 3) it is no longer present if I exit the tmux session entirely.

On the other hand, if I launch sleep 100 & manually from the command prompt (from within tmux), then it persists even after tmux exits. And if I invoke sleep 100 & via .bashrc in a bare terminal, it also persists after the shell exits.


  • tmux v2.6
  • macOS 10.11 El Capitan
  • bash v4.4.12(1)

Resposta oficial

O Nicholas Marriott respondeu:

tmux just closes the pty master, that is where its involvement ends, the rest is up to the processes themselves and the kernel. If you want background processes (that do not manage it themselves) to reliably stay around after their parent process exits you need to use nohup.

Nova pergunta

Como a resposta da @ nicm explica o comportamento que descrevi na edição original?

Em outras palavras, por que o pty trataria processos filhos gerados por .bashrc / .profile de forma diferente daqueles gerados manualmente na linha de comando? (Ou, por que o primeiro seria morto quando o mestre estiver fechado, enquanto o segundo não o faria?) E como é que o fechamento do mestre do pty é diferente de simplesmente sair de um emulador de terminal?

    
por Ryan Lue 22.01.2018 / 04:07

1 resposta

1

A explicação dada por M. Marriott é que tmux não é a causa disso .

A explicação para o que você está vendo está em outro lugar , em particular com programas de líder de sessão, terminais de controle, sinal de desligamento, shells de controle de trabalho, configurações de disciplina de linha e systemd-logind (em sistemas operacionais Linux systemd) também introduz o mix.

Leitura adicional

por 23.01.2018 / 11:27