web-dev-qa-db-ja.com

擬似端末とパイプのペア

Unixライクなシステムで疑似端末が別個の機能であるのはなぜですか?ターミナルエミュレータを実装するために、パイプとFIFOのペアよりも優れている理由は何ですか?

2
osvein

端末は他の形式のI/Oとは異なり、端末エミュレーターはそれ自体を端末として提示する必要があります。

  • 端末(疑似端末を含む)には、行の長さやサポートされている制御シーケンスなどの特定の属性があります。プログラムはこれらを要求できます。たとえば、一般にlsは、出力が端末に送られるかどうかを判断し、端末に一致するように色と表を調整します。

    これをテストできます:ls | catは個別の列を提供しません。疑似端末は、端末エミュレーターに適切な値を渡すために使用されます。

    別の例として、Sudosshのようなプログラムは、セキュリティ上の理由から、端末から直接パスワードを読み取るため、パイプで接続することはできません。

  • 端子は、プロセスを制御するために使用されます。 ^Cを押すと、端末はSIGINTフォアグラウンドプロセスに送信します。これが端末の仕事です。これは、^Cのようなものが機能するためには、端末がなければならないことを意味します。

    同様に、ターミナル(または最新のシステムではターミナルエミュレータのウィンドウを閉じる)で電話を切ると、それに関連付けられているすべてのプロセスにSIGHUPが送信されます。

    疑似端末はこれを処理しますが、パイプのペアは処理できません。

    一般に、デーモンを除くすべてのプロセスには制御端末があります。 psを使用して、どのプロセスがどの端末に属しているかを知ることができます。

3
marinus