![ssh が終了したときに実行されている現在のプログラムの動作は定義されていますか?](https://rvso.com/image/170678/ssh%20%E3%81%8C%E7%B5%82%E4%BA%86%E3%81%97%E3%81%9F%E3%81%A8%E3%81%8D%E3%81%AB%E5%AE%9F%E8%A1%8C%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E7%8F%BE%E5%9C%A8%E3%81%AE%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%81%AE%E5%8B%95%E4%BD%9C%E3%81%AF%E5%AE%9A%E7%BE%A9%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%81%8B%3F.png)
過去に、例えば、rails s
BashでRuby on Railsサーバーを( を使って)実行し、SSH接続した時にインターネット接続が中断されたとしたら、
- Ruby on Railsサーバーが停止する
- Ruby on Rails サーバーは実際には実行し続けていたため (VPN が切断されたためだと思います)、 を実行し
ps ux
てから関連するプロセスを 1 つずつ終了する必要がありました... 少し面倒でした。
(1) または (2) のいずれかが発生する可能性はありますか? 明確に定義された動作はありますか? たとえば、VPN ではなく、ssh が切断された場合は (1) ですが、VPN の場合は (1) または (2) のいずれかになりますか?
tmux
PS : Rails サーバーを実行する必要がある場合は、を使用するように切り替えました。これにより、戻ってtmux a -t foo
サーバーに再度アタッチし、必要に応じて CTRL-C を押すだけで済みます。
答え1
はい、シェルに関連付けられたプロセスはシグナル hup を受信します。そのようにプログラムされている場合は無視できます。man を参照してくださいnohup
。
たとえば、nohup command
コマンドを実行して hup が発生しないようにします。ただし、stdin、stdout、stderr もリダイレクトされます。
およびも参照してくださいdisown
。&
完全に切断するnohup > /dev/null command & disown