実際には制御端末とのセッションです。

実際には制御端末とのセッションです。

プロセスに制御端末があるということは、プロセス自体に制御端末があるという意味ですか、それともプロセスが属するセッションに制御端末があるということですか?

私はそれが制御端末とのセッションだと思いましたが、以下を読んでいます。ここ) これは、制御端末を使用したプロセスであることを意味します。

プロセスの属性の1つは制御端末です。フォークを使用して作成された子プロセスは、親プロセスの制御端末を継承します。このように、セッションのすべてのプロセスは、セッションリーダから制御端末を継承する。制御端末のセッションリーダーは、その端末の制御プロセスと呼ばれます。

答え1

実際には制御端末とのセッションです。

これ単一のUNIX仕様この関係を説明します制御端子「セッションに関連付けられている」。説明を続けると、制御端末はセッションと1:1の関係を持ちます。セッションは「最大1つのマスター端末」に関連付けられ、「1つのマスター端末は正確に1つのセッションに関連付けられます」。

FreeBSD設計と実装この本では、この問題を少し異なって扱いますが、同じ目標を達成します。同じセッションを共有するプロセスは、異なる制御端末を持つことはできず、単一の端末が同時に複数のセッションの制御端末になることはできません。

FreeBSDの内部では、これはデータ構造が実際に機能する方法です。プロセス構造には、pgrpプロセスが属するプロセスグループを表す構造を指すポインタがあり、これはプロセスグループが属するセッションを表す構造を指し、sessionこれは再びtty制御端末の構造を指します。セッション。

Linux内部では、状況はもう少し複雑です。各プロセスには、プロセスグループIDとセッションIDへの構造へのポインタtask_structセットがあり、各プロセス構造へのpid別のポインタがあり、signal_structこれはttyターミナルを制御する構造を直接指します。

追加読書

  • ジョージV.ネヴィル·ニール、マーシャルカークマック式、ロバートNMワトソン(2014-09-25)。 「工程管理」。FreeBSDオペレーティングシステムの設計と実装。アディソン - ウェスリーの専門家。 ISBN 9780133761832。
  • ドナルド・ラン(1991)。 「ターミナル入力/出力」。 POSIXプログラマガイド。オライリーメディアISBN 9780937175736。
  • Daniel P. BovetとMarco Cesatti(2005)。 「プロセス」。 Linuxカーネルについて:I / Oポートからプロセス管理まで。 3番目のバージョン。オライリーメディアISBN 9780596554910。
  • 「定義」。 オープングループ基本仕様。問題 7. 2016. IEEE 1003.1:2008.
  • 「ユニバーサル端末インターフェース」。 オープングループ基本仕様。問題 7. 2016. IEEE 1003.1:2008.

答え2

私は知識が不足しているため、以下の答えが間違っている可能性があります

@キー::

.tty拡張子を使用して、すべてのプロセスを制御tty(存在する場合)から切り離すことができますTIOCNOTTY ioctl

https://stackoverflow.com/questions/50649796/how-would-the-existing-processes-in-the-session-learn-about-and-acquire-the-cont

既存の子供は影響を受けません。

セッションリーダーが制御端末を獲得すると、セッションの他の既存のプロセスもどのように制御端末を獲得できますか?

=> (@回答::)

  • 大規模にsession_SS(多くのプロセス全体として)controlling_terminal_FFつながるまたは

  • (今session_SSに関連する話をしてくださいcontrolling_terminal_FF

    各個別プロセス(内部的にsession_SS)について

    それでも必ずしも関連しているわけではありません。controlling_terminal_FF(例:分離済み、制御端末なし)

    controlling_terminal_FF(接続するかどうかを選択できます)

    • しかし、オプションは境界1つの端末のみ - controlling_terminal_FF
  • [[だから一般的に言うように、厳格な"所有/含む"関係はありません。

    「関連/規則/制約」に関するものです。

    セッションは「所有/関連付け」することができ、プロセスは端末と「所有/関連付け」することもできます。セッションは、プロセスがどのように関連するかを「制限」します。]]

@詳細::

多くのプロセス、プロセスグループ、セッションを作成するとします。

これでプロセスができましたsession_leader_AAsession_SS

あなたは一つ持っています。terminal_FF

session_leader_AA人が中にいるときsession_SS 接続/開く()terminal_FF-terminal_FF制御端末になりますsession_SS(そしてsession_leader_AA制御プロセスになりますterminal_FF)。

  • サブプロセス継承する親プロセスの制御端末

    • session_SS内のすべてのサブプロセスすでに存在するsession_leader_AA接続する前にterminal_FF

      - まだどの端末にも接続されていません。

    • その中のすべての子プロセスはに接続した後に生成されsession_SSますが、session_leader_AAterminal_FF子プロセスではありません~のsession_leader_AA

      - まだどの端末にも接続されていません。

  • .tty拡張子を使用して、すべてのプロセスを制御tty(存在する場合)から切り離すことができますTIOCNOTTY ioctl

@Rule、注::

  • 1 つの制御端末は 1 つのセッションにのみ接続できます。

    1つのセッションには1つの制御端末しか接続できません。

  • セッション内のすべてのプロセスは(単一)制御端末を持つことができます

    つまり、プロセスには制御端末があり(一部のプロセスには制御端末がありません)、プロセスが所有する制御端末は同じ端末を参照する必要があります。

  • このioctl(fd, TIOCNOTTY)操作は、制御端末とプロセスの接続を削除するために使用できます。

    ioctl(fd, TIOCNOTTY)(プロセスに接続された制御端末がある場合は、すべてのプロセスで呼び出すことができます)

    (特に)session_leader_AA制御プロセスが呼び出される場合controlling_terminal_FFioctl(fd, TIOCNOTTY)

    次のステップが発生します。

    1. セッションのすべてのプロセスは、制御端末との接続を失います。

    2. 制御端末はセッションとの接続を失う。

      (したがって、他のセッションリーダーはコントロールターミナル+-で獲得できます。)

    3. カーネルはSIGHUP信号(およびSIGCONT信号)を送信します。

      + - フォアグラウンドプロセスグループのすべてのメンバー、

      + - 制御端末がないことを通知します。

    • (プロセスが終了したときに発生する状況を制御する手順と同じです。)

    Linuxプログラミングインターフェース

  • 他の関連PBSがありますが、まだ確認された答えはありません。

    1. したがって、非制御端末:_一般端末はファイル/端末接続として呼び出されますが、制御ではなくデータ読み取り専用で呼び出されます。

    2. 分離されたプロセスがControlling_Terminalから入力を受け取らないかどうか(目的)

      1. 一つsession_leader_AAsession_SS 接続/開く()terminal_FF-terminal_FF制御端末になりますsession_SS

      2. サブプロセス継承する親プロセスの制御端末

      (セッション/)プロセスを端末に接続する唯一の2つの方法のようです。

    3. Foreground_Process_GroupのプロセスもControlling_Terminalから切り離すことができるようです。

関連情報