我认为在过去,如果我rails s
在我通过 ssh 访问的 Bash 上运行 Ruby on Rails 服务器(通过使用 ),并且 Internet 连接中断,那么
- Ruby on Rails 服务器将停止
- 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