Sim, um programa executando sobre SSH dependerá de sua saída chegar a algum lugar. Se a conexão estiver lenta, a saída deverá ser armazenada em buffer em algum lugar e os buffers não poderão ser infinitos; portanto, o programa deverá bloquear se estiver cheio.
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
Com efeito, isso copiará o arquivo. Para que isso funcione, a taxa de saída do gato deve corresponder à da conexão: deve ser óbvio que perder partes da saída do meio seria inaceitável.
A tela mudará a situação na medida em que age como um terminal e salvará o que deve ser mostrado "na janela do terminal" (mais a rolagem). Ele não precisa se lembrar de tudo o que o seu programa produz, apenas as partes que cabem na "janela" e na rolagem. Por padrão, a tela aguardará uma conexão lenta (bloqueando o programa), mas pode ser configurada para detectar uma conexão travada, definindo "nonblock on".
Na página do manual:
nonblock [on | off | numsecs]
Diga à tela como lidar com interfaces de usuário (displays) que deixam de aceitar saída. Isso pode acontecer se um usuário pressionar ^ S ou uma conexão TCP / modem for cortada, mas nenhuma interrupção for recebida. Se a opção não bloqueada estiver desativada (esse é o padrão), aguarde até que o visor reinicie para aceitar a saída. Se nonblock estiver ativado, a tela aguardará até que o tempo limite seja atingido (ativado é tratado como 1s). Se o display ainda não receber caracteres, a tela o considerará "bloqueado" e parará de enviar caracteres para ele. Se, em algum momento, reiniciar para aceitar caracteres, a tela desbloqueará a exibição e exibirá novamente o conteúdo da janela atualizada.
Uma desconexão é diferente de uma conexão lenta. O SSH comum não pode se recuperar dele 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 irá bloquear o programa em execução.
(A configuração nonblock 1
do seu .screenrc
é importante se você executar algo como o irssi, que produzirá saída continuamente, mas ainda precisará conversar com a rede ao mesmo tempo. O bloqueio levaria à desconexão do IRC, o que é extremamente irritante ...)