当我们的 ssh 退出时,当前正在运行的程序是否有定义的行为?

当我们的 ssh 退出时,当前正在运行的程序是否有定义的行为?

我认为在过去,如果我rails s在我通过 ssh 访问的 Bash 上运行 Ruby on Rails 服务器(通过使用 ),并且 Internet 连接中断,那么

  1. Ruby on Rails 服务器将停止
  2. Ruby on Rails 服务器实际上一直在运行(我认为这是由于 VPN 断开),我必须执行 a ps ux,然后一一杀死所有相关进程......这有点混乱。

(1) 或 (2) 会发生吗?是否有明确定义的行为?例如,如果不是VPN,但ssh断开了,则为(1),但如果是VPN,则为(1)或(2)?

PS 如果我必须在上面运行 Rails 服务器,我已经切换到使用tmux,这样我就可以返回并tmux a -t foo附加回它,并在需要时按 CTRL-C。

答案1

是的,与 shell 关联的进程接收信号 hup。如果按照这种方式编程,他们可以忽略。见人nohup

例如nohup command运行命令,这样它就不会得到hup。而且还有 stdin、stdout、stderr 重定向。

另请参阅disown&

完全断开连接nohup > /dev/null command & disown

相关内容