Sim, um programa executando o SSH dependerá de sua saída para algum lugar. Se a conexão é lenta, a saída deve ser armazenada em algum lugar, e os buffers não podem ser infinitos, então o programa deve bloquear se eles estiverem cheios.
Observe que a saída pode não necessariamente ir para um terminal: considere executar algo como
ssh user@somewhere "cat file.txt" > file.txt
Isso irá, na verdade, copiar o arquivo. Para que isso funcione, a taxa de saída do gato deve coincidir com a da conexão: deve ser óbvio que perder partes da saída do meio seria inaceitável.
A tela mudará a situação, pois atuará como um terminal e salvará o que deve ser mostrado "na janela do terminal" (mais rolagem). Não precisa se lembrar de tudo que o seu programa produz, apenas as partes que caberão na "janela" e rolarão. Por padrão, a tela aguardará uma conexão lenta (bloqueando o programa), mas ela pode ser configurada para detectar uma conexão bloqueada configurando "nonblock on".
Da página do manual:
nonblock [on|off|numsecs]
Tell screen how to deal with user interfaces (displays) that cease
to accept output. This can happen if a user presses ^S or a TCP/modem
connection gets cut but no hangup is received. If nonblock is off
(this is the default) screen waits until the display restarts to
accept the output. If nonblock is on, screen waits until the
timeout is reached (on is treated as 1s). If the display still
doesn't receive characters, screen will consider it "blocked" and
stop sending characters to it. If at some time it restarts to accept
characters, screen will unblock the display and redisplay the updated
window contents.
Uma desconexão é diferente de uma conexão lenta. O SSH simples não pode se recuperar automaticamente, portanto, seu programa receberá um SIGHUP. Por outro lado, a tela detectará uma desconexão, desconectará e retornará ao buffer local até que a tela seja reconectada. Isso não bloqueará o programa em execução.
(Configurar nonblock 1
no seu .screenrc
é importante se você executar algo como o irssi que produzirá continuamente a saída, mas ainda precisa falar com a rede ao mesmo tempo. O bloqueio levaria à desconexão do IRC, que é extremamente irritante ...)