![當我們的 ssh 退出時,目前正在執行的程式是否有定義的行為?](https://rvso.com/image/170678/%E7%95%B6%E6%88%91%E5%80%91%E7%9A%84%20ssh%20%E9%80%80%E5%87%BA%E6%99%82%EF%BC%8C%E7%9B%AE%E5%89%8D%E6%AD%A3%E5%9C%A8%E5%9F%B7%E8%A1%8C%E7%9A%84%E7%A8%8B%E5%BC%8F%E6%98%AF%E5%90%A6%E6%9C%89%E5%AE%9A%E7%BE%A9%E7%9A%84%E8%A1%8C%E7%82%BA%EF%BC%9F.png)
我認為在過去,如果我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