O nível externo screen
(PID 6649) conecta-se ao terminal de onde você iniciou e é finalizado quando você desanexar ( Ctrl + a , d ).
O interior screen
(PID 6650) não está conectado a esse terminal, mas controla seu próprio dispositivo pseudo-terminal (pty), ao qual o bash
iniciado a partir dele é conectado .
O que acontece é que quando você digita algo no terminal externo, o% externo screen
o recebe, envia-o por um soquete para a tela interna, e esse, por sua vez, encaminha a entrada para o arquivo que ele controla. atinge bash
(ou qualquer outro programa iniciado a partir do bash, e controlado através do mesmo pty). A saída do bash (ou qualquer programa iniciado a partir dele) será enviada para o arquivo interno screen
, o que faz com que o screen
interno o envie através do soquete para o% externoscreen
, que finalmente o envia ao terminal você iniciou screen
de (que no seu caso é novamente um arquivo criado por ssh
). Note que o socket é controlado pelo inner screen
, que permite desanexar e voltar a ligar (veja abaixo).
Se você desanexar a instância screen
, o que acontece é que o screen
interno, e com ele o controle, continua a existir. É por isso que os processos que se conectam a ele sobreviverão, mesmo se eles tentarem fazer E / S. No entanto, o% externo screen
terminará, interrompendo assim a conexão com o terminal externo. Você pode agora, por exemplo, encerrar a sessão ssh
, e assim destruir o arquivo correspondente, e isso não afetará o screen
interno nem os programas iniciados por ele, já que eles se comunicam através de seu próprio dispositivo.
Se você fizer login novamente (criando outro pty) e, em seguida, chamar screen -r
, a instância screen
recém-criada será conectada ao terminal do qual você iniciou (que é completamente separado daquele da primeira instância foi iniciado a partir de, desde que você destruiu isso) e, em seguida, use o soquete fornecido pela instância screen
interna para reconectar-se com o screen
interno, que enviará o estado atual de seu próprio arquivo para o "externo" screen
para exibir novamente; depois, a mesma linha de transmissão de E / S acontece com a instância externa screen
anterior.
Se você agora fizer um pstree
, encontrará duas linhas com screen
: uma começando em sshd
e terminando na nova instância "outer" screen
, e um começando com a instância "%"screen
"interna" que agora não tem mais um pai desde que foi terminado quando você desanexou o screen
.
Então, resumindo:
- A tela "externa" (PID 6649) conecta-se ao terminal com o qual você está interagindo (no seu caso, o arquivo configurado por
ssh
) e só dura enquanto você estiver conectado aoscreen
instância. - A tela "interna" (PID 6650) fornece um arquivo separado para os programas que você inicia na tela e também fornece o soquete usado para comunicar o estado do terminal entre a instância externa e interna
screen
. Vive até você terminarscreen
(ao invés de separar). - A separação é necessária para permitir que os programas controlados sobrevivam à morte do material externo (sendo conectado a um objeto diferente que, junto com seu processo de controle - o interior
screen
- sobrevive ao desligamento do terminal externo), bem como para reconectar (tendo oscreen
interno sobrevivente fornecendo um soquete ao qual novas instâncias descreen
podem se conectar).