TeraTermなどのアプリケーションからログインした後、
明示的にexit(logout)をせずにTeraTermを終了しても
ログインした端末(tty)のプロセスはちゃんと終了しています。
どのような仕組みなのでしょうか?
もっというと、あるUnix/LinuxサーバがTeraTermのような
外側のアプリケーションから接続されたときに
どのような手順で接続が確立し、終了するときに接続が消えるか、
というようなことについて、詳しく教えていただきたいです。
詳しくのっている書籍・ウェブサイトでもよいのでよろしくお願いします。
TeraTerm などで接続した場合、サーバーデーモンである telnetd や sshd が受け付ける。
各種デーモンは fork して自身をコピーした後ログイン認証などの処理を行い、認証が終わればログインシェルを起動する。
通常ログイン後の状態はこの状態。
UNIX/Linux においてプロセスは最初のひとつを除いてすべて親から生成される。
だからログインシェルが起動している間は同時に親となる通信デーモン( telnetd/sshd )も起動したままの状態。
これは pstree コマンドを使用すれば視覚的に確認できる。
逆に親プロセスが終了した場合、その子プロセスには HUP シグナルが送信される。
TeraTerm を終了した場合やログアウトした場合などにこれはよく起こる状況で、通信が切断されたことで通信デーモン( telnetd/sshd )が
終了し、その子プロセスであるログインシェルに HUP シグナルが送信されることになる。
これは通常そのプロセスの終了を意味するので結果的にログインシェル以下ツリー上に連なる子プロセスはほぼすべて終了することになる。
厳密には HUP シグナルを無視することは可能なので、終了しないプロセスも存在する。
nohup コマンドなどは逆にログアウト後、終了させたくない場合に意図的にシグナルを無視させるために存在する。
このあたりは fork, exec, kill あたりをキーワードに調べれば出てくると思う。
TeraTerm などで接続した場合、サーバーデーモンである telnetd や sshd が受け付ける。
各種デーモンは fork して自身をコピーした後ログイン認証などの処理を行い、認証が終わればログインシェルを起動する。
通常ログイン後の状態はこの状態。
UNIX/Linux においてプロセスは最初のひとつを除いてすべて親から生成される。
だからログインシェルが起動している間は同時に親となる通信デーモン( telnetd/sshd )も起動したままの状態。
これは pstree コマンドを使用すれば視覚的に確認できる。
逆に親プロセスが終了した場合、その子プロセスには HUP シグナルが送信される。
TeraTerm を終了した場合やログアウトした場合などにこれはよく起こる状況で、通信が切断されたことで通信デーモン( telnetd/sshd )が
終了し、その子プロセスであるログインシェルに HUP シグナルが送信されることになる。
これは通常そのプロセスの終了を意味するので結果的にログインシェル以下ツリー上に連なる子プロセスはほぼすべて終了することになる。
厳密には HUP シグナルを無視することは可能なので、終了しないプロセスも存在する。
nohup コマンドなどは逆にログアウト後、終了させたくない場合に意図的にシグナルを無視させるために存在する。
このあたりは fork, exec, kill あたりをキーワードに調べれば出てくると思う。
ありがとうございます。
> 外側のアプリケーションから接続されたときに
> どのような手順で接続が確立し、終了するときに接続が消えるか
TCP/IPの話かtelnetの話をしたいのか不明ですが、
TCPの場合はRFC793, telnetの場合はRFC854を参照してみてください。
下記のURLに日本語版と原文のRFCの一覧があります
http://www5d.biglobe.ne.jp/~stssk/rfcjlist.html
なお、telnetに限らず、インターネット上のほとんどの通信プロトコルは
TCP/IPを前提としています。
例えば、ftp, http, pop, smtpなどはTCP/IP上で動作しています。
ありがとうございます。
こんにちは。
実際には、TCP/IPモニターを用いて、どういう処理を行ってるかを
見れば、確実にわかります。
http://jp.brothersoft.com/downloads-tcp-ip-monitor-software.html
最悪、タイムアウトしますので、その時点でプロセスは終了するとは思います。
ありがとうございます。
TeraTermプロセスが終了するときに、WindowsのソケットライブラリがFINを送っていると思います。
「TCPの状態遷移図」に関しては、たとえば、以下
http://www.atmarkit.co.jp/fwin2k/network/baswinlan016/baswinlan0...
で。
ありがとうございます。
ありがとうございます。