プロセスに制御端末があるということは、プロセス自体に制御端末があるという意味ですか、それともプロセスが属するセッションに制御端末があるということですか?
私はそれが制御端末とのセッションだと思いましたが、以下を読んでいます。ここ) これは、制御端末を使用したプロセスであることを意味します。
プロセスの属性の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
。既存の子供は影響を受けません。
=> (@回答::)
大規模に
session_SS
(多くのプロセス全体として)controlling_terminal_FF
&つながるまたは(今
session_SS
に関連する話をしてくださいcontrolling_terminal_FF
)各個別プロセス(内部的に
session_SS
)についてそれでも必ずしも関連しているわけではありません。
controlling_terminal_FF
(例:分離済み、制御端末なし)controlling_terminal_FF
(接続するかどうかを選択できます)- しかし、オプションは境界1つの端末のみ -
controlling_terminal_FF
。
- しかし、オプションは境界1つの端末のみ -
[[だから一般的に言うように、厳格な"所有/含む"関係はありません。
「関連/規則/制約」に関するものです。
セッションは「所有/関連付け」することができ、プロセスは端末と「所有/関連付け」することもできます。セッションは、プロセスがどのように関連するかを「制限」します。]]
@詳細::
多くのプロセス、プロセスグループ、セッションを作成するとします。
これでプロセスができましたsession_leader_AA
。session_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_AA
terminal_FF
子プロセスではありません~のsession_leader_AA
- まだどの端末にも接続されていません。
.tty拡張子を使用して、すべてのプロセスを制御tty(存在する場合)から切り離すことができます
TIOCNOTTY ioctl
。
@Rule、注::
1 つの制御端末は 1 つのセッションにのみ接続できます。
1つのセッションには1つの制御端末しか接続できません。
セッション内のすべてのプロセスは(単一)制御端末を持つことができます
つまり、プロセスには制御端末があり(一部のプロセスには制御端末がありません)、プロセスが所有する制御端末は同じ端末を参照する必要があります。
この
ioctl(fd, TIOCNOTTY)
操作は、制御端末とプロセスの接続を削除するために使用できます。ioctl(fd, TIOCNOTTY)
(プロセスに接続された制御端末がある場合は、すべてのプロセスで呼び出すことができます)(特に)
session_leader_AA
制御プロセスが呼び出される場合controlling_terminal_FF
ioctl(fd, TIOCNOTTY)
次のステップが発生します。
セッションのすべてのプロセスは、制御端末との接続を失います。
制御端末はセッションとの接続を失う。
(したがって、他のセッションリーダーはコントロールターミナル+-で獲得できます。)
カーネルはSIGHUP信号(およびSIGCONT信号)を送信します。
+ - フォアグラウンドプロセスグループのすべてのメンバー、
+ - 制御端末がないことを通知します。
- (プロセスが終了したときに発生する状況を制御する手順と同じです。)
Linuxプログラミングインターフェース
-
他の関連PBSがありますが、まだ確認された答えはありません。
したがって、非制御端末:_一般端末はファイル/端末接続として呼び出されますが、制御ではなくデータ読み取り専用で呼び出されます。
分離されたプロセスがControlling_Terminalから入力を受け取らないかどうか(目的)
-
一つ
session_leader_AA
session_SS
接続/開く()terminal_FF
-terminal_FF
制御端末になりますsession_SS
サブプロセス継承する親プロセスの制御端末
(セッション/)プロセスを端末に接続する唯一の2つの方法のようです。
Foreground_Process_GroupのプロセスもControlling_Terminalから切り離すことができるようです。