网络超时时结束子进程

网络超时时结束子进程

我有一个 .NET 程序(编辑:使用 MONO),将其命名myfoo为驻留在我的远程 ubuntu 服务器上的程序。要访问它,我通过 ssh 进入我的盒子(使用 wifi,而不是以太网)。我的 bash shell 正常启动,我 cd 到目录,然后通过 运行该程序mono myfoo。一切正常。

不幸的是,我所在的公司有一些非常令人讨厌的 wifi 问题。简而言之,vpn 时不时会出问题,所以虽然我的设备保持与 wifi 的连接,但整个网络连接与我的服务器断开了。

当然,这会导致我的设备最终意识到连接已断开,并显示传统的管道断开错误。现在,这是问题:

当我重新连接并再次启动 myfoo 时,它不起作用。我已将问题追溯到这样一个事实:当连接中断时,bash 不会结束 myfoo 的上一个实例。我必须手动终止上一个实例,然后才能启动新的实例。由于各种原因,这是一个问题。我原本以为当连接中断时,bash 会退出,从而终止它产生的任何子进程。显然,这并没有发生。有什么办法可以让它发生吗?我宁愿不更改程序的源代码,但如果我需要捕捉中断或其他东西,我可以这样做。我希望我的 bash 配置文件设置中有某种解决方案,或者某种允许这种行为发生的东西。

答案1

如果使用 OpenSSH,您可以启用保持活动数据包,它将检测断开的连接并结束 ssh 会话,从而导致 bash 退出:

ssh -o ServerAliveInterval=2

这会每两秒发送一次保持活动,如果没有任何数据包。如果连续三次保持活动都未收到(可以通过设置更改-o ServerAliveCountMax=10),连接将关闭。

相关内容