制御端末の目的は何ですか?

制御端末の目的は何ですか?

ターミナルでプログラムを開き、3つのファイルにリダイレクトするとしますstdinstdoutstderr

プログラムが出力を端末に送信しなくなり、端末から入力を受け取らなくても、プログラムには端末への「リンク」が残っています。プログラムは「リンクされた」端末を呼び出します。制御端子、次の図はこれを示しています。

ここに画像の説明を入力してください。

私の質問は:制御端末の用途は何ですか?私の考えは、制御端末を使用してプログラムに信号を送信できることです(例:)Ctrl+C

制御端末を他の用途に使用しますか?

ベストアンサー1

端末を制御することにより、プロセスは、どのプロセスグループが(同じセッション内で)フォアグラウンドプロセスグループであるかをカーネルに通知できます。ターミナルにフォアグラウンドプロセスグループがある場合は、Ctrl-C / Ctrl-\などのターミナルを介してフォアグラウンドプロセスグループを制御して、フォアグラウンドプロセスグループを終了できます。 (端末には1つのフォアグラウンドプロセスグループしかありません。正確に言えば、端末は1つのプロセスセッションにのみ関連付けることができます。)

制御端末を使用すると、stdinを別の場所/ファイルにリダイレクトした場合でも、制御端末から読み書きできます/dev/tty。この特殊ファイルは、カーネル内の現在のプロセスの制御端末と同義です。プロセスに接続されている制御端末がないと、このファイルを開くことはできません。このファイルで何ができますか?たとえば、一部のプログラムでは、ログインや暗号化用のプログラムなど、特定のタスクを実行する前にユーザーにパスワードを入力する必要があります。これらのプログラムは、ユーザーが標準入力からパスワードを入力するのを防ぎます。つまり、標準入力を任意のファイルにリダイレクトしても、ユーザーはまだ入力を待っています。その理由は、読み取り用にすべて/dev/ttyを開くからです。

要約すると、カーネルは、端末を制御することによって、誰かが必要な場合に端末生成信号と端末入力を伝達する場所を知ることができます。それはすべてです。

したがって、プロセスがターミナルによって制御されることを望まず、「/dev/tty」で読み書きをしたくない場合(ほとんどのデーモンと同様)、コントロールターミナルに接続する必要はありません。ただし、シェル内で開始された一般的なプロセスは、シェルセッションのメンバーであり、制御端末がシェルの起動時に確立されたため、常に制御端末に関連付けられます。 (実際には、ランダムプロセスは端末を制御端末に接続できず、セッションリーダープロセスのみ接続することができる。)

おすすめ記事