ベストアンサー1
端末を制御することにより、プロセスは、どのプロセスグループが(同じセッション内で)フォアグラウンドプロセスグループであるかをカーネルに通知できます。ターミナルにフォアグラウンドプロセスグループがある場合は、Ctrl-C / Ctrl-\などのターミナルを介してフォアグラウンドプロセスグループを制御して、フォアグラウンドプロセスグループを終了できます。 (端末には1つのフォアグラウンドプロセスグループしかありません。正確に言えば、端末は1つのプロセスセッションにのみ関連付けることができます。)
制御端末を使用すると、stdinを別の場所/ファイルにリダイレクトした場合でも、制御端末から読み書きできます/dev/tty
。この特殊ファイルは、カーネル内の現在のプロセスの制御端末と同義です。プロセスに接続されている制御端末がないと、このファイルを開くことはできません。このファイルで何ができますか?たとえば、一部のプログラムでは、ログインや暗号化用のプログラムなど、特定のタスクを実行する前にユーザーにパスワードを入力する必要があります。これらのプログラムは、ユーザーが標準入力からパスワードを入力するのを防ぎます。つまり、標準入力を任意のファイルにリダイレクトしても、ユーザーはまだ入力を待っています。その理由は、読み取り用にすべて/dev/ttyを開くからです。
要約すると、カーネルは、端末を制御することによって、誰かが必要な場合に端末生成信号と端末入力を伝達する場所を知ることができます。それはすべてです。
したがって、プロセスがターミナルによって制御されることを望まず、「/dev/tty」で読み書きをしたくない場合(ほとんどのデーモンと同様)、コントロールターミナルに接続する必要はありません。ただし、シェル内で開始された一般的なプロセスは、シェルセッションのメンバーであり、制御端末がシェルの起動時に確立されたため、常に制御端末に関連付けられます。 (実際には、ランダムプロセスは端末を制御端末に接続できず、セッションリーダープロセスのみ接続することができる。)