當我們的 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

相關內容