Unix/Linuxの端末?についての質問です。


TeraTermなどのアプリケーションからログインした後、
明示的にexit(logout)をせずにTeraTermを終了しても
ログインした端末(tty)のプロセスはちゃんと終了しています。
どのような仕組みなのでしょうか?

もっというと、あるUnix/LinuxサーバがTeraTermのような
外側のアプリケーションから接続されたときに
どのような手順で接続が確立し、終了するときに接続が消えるか、
というようなことについて、詳しく教えていただきたいです。

詳しくのっている書籍・ウェブサイトでもよいのでよろしくお願いします。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2008/03/15 09:58:58
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:b-wind No.1

回答回数3344ベストアンサー獲得回数440

ポイント80pt

TeraTerm などで接続した場合、サーバーデーモンである telnetd や sshd が受け付ける。

各種デーモンは fork して自身をコピーした後ログイン認証などの処理を行い、認証が終わればログインシェルを起動する。

通常ログイン後の状態はこの状態。


UNIX/Linux においてプロセスは最初のひとつを除いてすべて親から生成される。

だからログインシェルが起動している間は同時に親となる通信デーモン( telnetd/sshd )も起動したままの状態。

これは pstree コマンドを使用すれば視覚的に確認できる。

逆に親プロセスが終了した場合、その子プロセスには HUP シグナルが送信される。

TeraTerm を終了した場合やログアウトした場合などにこれはよく起こる状況で、通信が切断されたことで通信デーモン( telnetd/sshd )が

終了し、その子プロセスであるログインシェルに HUP シグナルが送信されることになる。

これは通常そのプロセスの終了を意味するので結果的にログインシェル以下ツリー上に連なる子プロセスはほぼすべて終了することになる。


厳密には HUP シグナルを無視することは可能なので、終了しないプロセスも存在する。

nohup コマンドなどは逆にログアウト後、終了させたくない場合に意図的にシグナルを無視させるために存在する。


このあたりは fork, exec, kill あたりをキーワードに調べれば出てくると思う。

id:kanouk

ありがとうございます。

2008/03/15 09:56:42

その他の回答4件)

id:b-wind No.1

回答回数3344ベストアンサー獲得回数440ここでベストアンサー

ポイント80pt

TeraTerm などで接続した場合、サーバーデーモンである telnetd や sshd が受け付ける。

各種デーモンは fork して自身をコピーした後ログイン認証などの処理を行い、認証が終わればログインシェルを起動する。

通常ログイン後の状態はこの状態。


UNIX/Linux においてプロセスは最初のひとつを除いてすべて親から生成される。

だからログインシェルが起動している間は同時に親となる通信デーモン( telnetd/sshd )も起動したままの状態。

これは pstree コマンドを使用すれば視覚的に確認できる。

逆に親プロセスが終了した場合、その子プロセスには HUP シグナルが送信される。

TeraTerm を終了した場合やログアウトした場合などにこれはよく起こる状況で、通信が切断されたことで通信デーモン( telnetd/sshd )が

終了し、その子プロセスであるログインシェルに HUP シグナルが送信されることになる。

これは通常そのプロセスの終了を意味するので結果的にログインシェル以下ツリー上に連なる子プロセスはほぼすべて終了することになる。


厳密には HUP シグナルを無視することは可能なので、終了しないプロセスも存在する。

nohup コマンドなどは逆にログアウト後、終了させたくない場合に意図的にシグナルを無視させるために存在する。


このあたりは fork, exec, kill あたりをキーワードに調べれば出てくると思う。

id:kanouk

ありがとうございます。

2008/03/15 09:56:42
id:felix33jp No.2

回答回数484ベストアンサー獲得回数3

ポイント5pt

logoutするようになっていたと思います。

id:kanouk

ありがとうございます。

2008/03/15 09:56:51
id:dev_zer0 No.3

回答回数332ベストアンサー獲得回数25

ポイント5pt

> 外側のアプリケーションから接続されたときに

> どのような手順で接続が確立し、終了するときに接続が消えるか

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上で動作しています。

id:kanouk

ありがとうございます。

2008/03/15 09:57:00
id:AZUY No.4

回答回数343ベストアンサー獲得回数12

ポイント5pt

こんにちは。

実際には、TCP/IPモニターを用いて、どういう処理を行ってるかを

見れば、確実にわかります。

http://jp.brothersoft.com/downloads-tcp-ip-monitor-software.html

最悪、タイムアウトしますので、その時点でプロセスは終了するとは思います。

id:kanouk

ありがとうございます。

2008/03/15 09:57:10
id:masshie No.5

回答回数57ベストアンサー獲得回数1

ポイント5pt

TeraTermプロセスが終了するときに、WindowsのソケットライブラリがFINを送っていると思います。

「TCPの状態遷移図」に関しては、たとえば、以下

http://www.atmarkit.co.jp/fwin2k/network/baswinlan016/baswinlan0...

で。

id:kanouk

ありがとうございます。

2008/03/15 09:57:25
  • id:KuroNeko666
    TeraTermは、正常終了時にセッションをクローズさせる挙動を自動で行ってたはずです。
    Windows上でTeraTermプロセスを強制終了させると、Linux上でセッションが残ってます。
    …タイムアウトの時間がくれば、勝手に終了しますが。

    > 外側のアプリケーションから接続されたときにどのような手順で接続が確立

    ISO基本参照モデルはご存知でしょうか?
    上位レイヤーから下位レイヤーに処理が渡されて、相手にパケットが届いたら下位レイヤーから上位レイヤーに伝わります。

    TCP/IP 関連のRFCを読むと、接続の手順は全部わかります。

    # 以上、不親切なのでコメント。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません