'tty'コマンドの出力と '/dev/tty'ファイルは現在のbashプロセスの制御端末を指していますか?

'tty'コマンドの出力と '/dev/tty'ファイルは現在のbashプロセスの制御端末を指していますか?
  1. ~からman tty

    tty - 標準入力に接続された端末のファイル名を出力します。

    $ tty
    /dev/pts/2
    
  2. APUEから:

    歴史的に、ほとんどのUNIXシステムバージョンでは、制御端末の名前はありました/dev/tty。 POSIX.1は、制御端末の名前を決定するために呼び出すことができるランタイム関数を提供します。

    #include <stdio.h>
    char *ctermid(char *ptr);
    
    $ ls -la /dev/tty
    crw-rw-rw- 1 root tty 5, 0 May 26 00:16 /dev/tty
    

ttyそのため、コマンドの出力とファイルの/dev/tty 両方が現在のbashプロセスの制御端末を参照しているかどうかを知りたいと思います。

それでは、コマンドが別の疑似tty端末スレーブファイルを出力するのはなぜですか?/dev/pts/2/dev/tty

ターミナルエミュレータlxterminalとその中で実行されるbashシェルは疑似ターミナルペアを使用するので、疑似ターミナルスレーブはbash/dev/pts/2シェルのコントロールターミナルではありませんか?

/dev/tty/dev/pts/2互いにシンボリックリンクではないので、異なるファイルですか?

ありがとうございます。

フォローアップ投稿現在の制御端末と `/dev/tty`の関係は何ですか?

ベストアンサー1

コマンドtty(1) は、標準入力に接続された端末の名前を返します。これは制御端末であってもなくてもよい。プロセスに制御端末があるかもしれませんが、端末が標準入力に接続する必要があることはわかりません。

POSIXではtty(1)のマニュアルページ:

ttyユーティリティは、標準入力で開かれた端末の名前を標準出力に書き込む必要があります。使用される名前は、 ttyname()POSIX.1-2008システムインタフェースボリュームで定義されている関数によって返された文字列と同じでなければなりません。

自分で試してみてください。

< /dev/null sh -c 'tty; sleep 10; echo "Done."'

ttystdinは(擬似)端末ではないので、「not a tty」というメッセージを見た後、Ctrl + Cを押してください。

一方、は/dev/tty常にプロセスの制御端末と同義です。ただし、プロセスが実際に持つ制御端末

おすすめ記事