我已经通过 SSH 连接到服务器并登录到 mysql,并要求它运行一个查询(其结果转储到 CSV 中),这可能需要一个多小时。尽管我已经指示我的客户端每 60 秒发送一次空数据包以保持会话处于活动状态,但我仍然怀疑 mysql 查询/进程可能会终止,所以我的问题是:
大多数 shell 在退出时将 SIGHUP 发送到前台进程组(并且在某些后台进程中,在 bash 中,这是由 shell option 控制的huponexit
),这可能会导致它死亡,具体取决于您的 mysql 客户端如何处理。
nohup
如果你的 shell 退出,你可以运行你的命令,让它在你的 shell 退出时由 init 重新设置父级,无论你的 shell 是否发送 SIGHUP(被 init 重新命名为与 nohup 没有特别相关的 - 只是它已经超过了它的父级)。
可能是一个更可口的解决办法是使用tmux
,screen
,dtach
或类似的运行客户端在你的shell和控制终端抽象出来。这样,如果您的 shell 断开连接,您只需重新连接到您在其中运行查询的会话。
一般来说,keepalive 数据包无关紧要,连接不会无缘无故终止。更紧迫的问题是由于其他原因(网络故障等)导致客户端和服务器之间的连接丢失。