我認為在過去,如果我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