encerra o processo filho no tempo limite da rede

0

Eu tenho um programa .NET ( Edit: using MONO ), chamo de myfoo que reside no meu servidor ubuntu remoto. Para acessá-lo, eu ssh na minha caixa (usando wifi, não ethernet). Meu bash shell inicia como normal, eu cd para o diretório e, em seguida, execute o programa via mono myfoo . tudo isso funciona bem.

Infelizmente, a empresa onde trabalho tem alguns problemas bastante desagradáveis. A versão curta é que a vpn adivinha de vez em quando, então enquanto meu dispositivo permanece conectado ao wifi, toda a conexão de rede é cortada para o meu servidor.

Naturalmente, isso faz com que meu dispositivo acabe percebendo que a conexão desapareceu e exibe o erro tradicional do cano quebrado. Agora, aqui está o problema:

Quando eu me reconecto e inicio o myfoo novamente, ele não funciona. Eu rastreei o problema até o fato de que quando a conexão quebra, o bash não termina a instância anterior do myfoo. Eu tenho que matar manualmente a instância anterior antes de iniciar o novo. Por várias razões, isso é um problema. Eu teria esperado que quando a conexão quebrasse, bash sairia e, portanto, mataria qualquer criança que gerasse. Aparentemente, isso não está acontecendo. Existe uma maneira que eu possa fazer acontecer? Eu preferiria não alterar o código fonte do programa, mas se eu precisar, a fim de pegar uma interrupção ou algo que eu possa. Eu preferiria que houvesse alguma solução nas minhas configurações de perfil bash ou algo que permitisse que esse comportamento ocorresse.

    
por Russell Uhl 25.06.2014 / 19:05

1 resposta

1

Se estiver usando o OpenSSH, você pode ativar os pacotes keep alive que detectarão a conexão descartada e encerrar a sessão ssh, fazendo com que o bash saia:

ssh -o ServerAliveInterval=2

Isso enviará uma keep alive toda vez que dois segundos passarem sem nenhum pacote. Se três keepalives consecutivos forem perdidos (pode ser alterado definindo -o ServerAliveCountMax=10 ), a conexão será fechada.

    
por 26.06.2014 / 02:44