Lubuntu 18.04では、lxterminalでシェルを実行します。その制御端末は、現在の疑似端末スレーブです:
$ tty
/dev/pts/2
現在の制御端末/dev/pts/2
との関係を知りたい および/dev/tty
。
-
/dev/tty
現在の制御端末のように動作します/dev/pts/2
:$ echo hello > /dev/tty hello $ cat < /dev/tty world world ^C
-
しかし、それらは、一方が他方へのシンボリックリンクまたはハードリンクではなく、無関係のファイルのようです:
$ ls -lai /dev/tty /dev/pts/2 5 crw--w---- 1 t tty 136, 2 May 31 16:38 /dev/pts/2 13 crw-rw-rw- 1 root tty 5, 0 May 31 16:36 /dev/tty
異なる制御端末との異なるセッションの場合、
/dev/tty
それらの制御端末であることが保証されています。
シンボリックリンクやハードリンクではなく、
異なる制御端末になるにはどうすればよいですか?
では、それらの関係と違いは何ですか?どんな助けでも大歓迎です!
この投稿は以前の投稿から発信されていますコマンド`tty`の出力とファイル`/dev / tty`はどちらも、現在のbashプロセスの制御端末を参照していますか?
承認された回答:
tty
セクション4のマンページは次のように主張しています:
ファイル/dev / tty はメジャー番号5とマイナー番号0の文字ファイルで、通常はモード0666とowner.grouproot.ttyです。これは、
プロセスの制御端末の同義語です。
ioctl(2)
に加えて tty
が参照するデバイス、ioctl(2)
でサポートされているリクエストTIOCNOTTY
をリクエストする サポートされています。
TIOCNOTTY
呼び出しプロセスを制御端末から切り離します。
プロセスがセッションリーダーの場合、
SIGHUP
およびSIGCONT
シグナルは
フォアグラウンドプロセスグループに送信され、
現在のセッションのすべてのプロセスは制御ttyを失います。この
ioctl(2)
呼び出しは、 / dev / ttyに接続されたファイル記述子でのみ機能します 。これは、デーモンプロセスが端末で
ユーザーによって呼び出されたときに使用されます。プロセスは/dev / ttyを開こうとします 。
オープンが成功すると、TIOCNOTTY
を使用してターミナルからデタッチします。 、オープンに失敗した場合、それは明らかに
ターミナルに接続されておらず、それ自体を切り離す必要はありません。
これは、/dev/tty
の理由の一部を説明します。 制御端末へのシンボリックリンクではありません。追加のioctl
をサポートします。 、および制御端末がない可能性があります(ただし、プロセスは常に/dev/tty
へのアクセスを試みることができます )。ただし、ドキュメントは正しくありません。追加のioctl
経由でアクセスできるだけではありません /dev/tty
(mosvyの回答を参照してください。これは、/dev/tty
の性質についてより賢明な説明も提供します。 。
/dev/tty
リンクではなく、さまざまな制御端末を表すことができます。これは、それを実装するドライバーが、呼び出し元のプロセスの制御端末が存在する場合はそれを決定するためです。
これは/dev/tty
と考えることができます 制御端末であるため、制御端末にのみ意味のある機能を提供しますが、/dev/pts/2
などはプレーン端末であり、そのうちの1つが特定のプロセスの制御端末である可能性があります。