Unixファミリーシステムで擬似端末が別の機能であるのはなぜですか?ターミナルエミュレータを実装するためにパイプペアやFIFOよりも優れていますか?
答え1
ターミナル他の形式のI / Oとは異なり、ターミナルエミュレータは自分自身をターミナルとしてマークする必要があります。
端末(疑似端末を含む)には、行の長さやサポートされている制御シーケンスなどの特定の属性があります。プログラムは通常、
ls
出力を端末に送信するかどうかを決定するように要求し、端末に一致するように色とタブを調整できます。これをテストできます。
ls | cat
別の列を提供しません。擬似端末は、端末エミュレータに適切な値を渡すために使用されます。別の例として、セキュリティ上の理由から、
sudo
プログラムはssh
パスワードを端末から直接読み取ることができないので、パイプで接続することができない。端末はプロセスを制御するために使用されます。を押すと、
^C
端末からSIGINT
次に送信されます。フォアグラウンドプロセス。これが端末の役割です。つまり、スムーズに動作するには^C
端末が必要であることを意味します。同様に、端末を一時停止すると(または最新のシステムでは端末エミュレータウィンドウを閉じる)、その
SIGHUP
端末に関連するすべてのプロセスに送信されます。擬似端末はこれを処理できますが、一対のパイプは処理できません。
通常、デーモンを除くすべてのプロセスには制御端末があります。
ps
どのプロセスがどの端末に属しているかを知らせるために使用できます。