Linuxが/ dev / ttyおよび/ dev / tty0を使用する方法


8

この質問から提供されたメソッドをテストすることで、/ dev / ttyと/ dev / tty0の違いを確認できます。しかし、私はそれらのデバイスの実際の使用法(それらが使用される状況など)について本当に疑問に思っています。


@ 0xC0000022L sdaとは異なり、ttyには3つの異なるカテゴリ(tty、tty0、tty [1、..、N])があるため、どういうわけか、ttyをsdaに関連付けることができません。
Ron Vince

@ 0xC0000022Lが提供する類推は、かなり誤解を招くと思います。とは両方とも特定のブロックデバイス/dev/sda/dev/sda1指定します(一方は偶然他方の一部です)。/dev/tty一方、は、他の特定のttyに関連しない仮想デバイスです。
Celada

回答:


16

/dev/ttyこの特殊ファイルを実際に開くすべてのプロセスの現在のプロセスの制御端末です。これは必ずしも仮想コンソールデバイス(/dev/ttyn)である必要はなく、、シリアルポートなど。制御するttyが仮想コンソールでない場合、そのpseudottyが実際にシステムコンソールに実装されていても、プロセスはコンソールデバイスと対話する必要はありません。例:ローカルで実行されているXサーバー下のターミナルエミュレーターのシェルの場合、プログラムは次のような一連の対話を形成します。

   Unixシェル
     ⇕ /dev/pts/2/dev/ttyそのプロセスの))
 カーネルptyドライバー
     ⇕ /dev/ptmx
 端末エミュレーター
     ⇕Xウィンドウプロトコル
   Xサーバー
     ⇕ /dev/tty7(サーバーの≡ /dev/tty
 システムコンソール
zxc↿⇂[_̈░░]
    ユーザー

/dev/ttyユーザーランドプログラムによる使用には以下が含まれます。

  • すべてのリダイレクトとパイプを無視して、制御端末に何かを書き込みます。
  • ioctl()を作成します。tty_ioctl(4)を参照してください。
  • たとえば、ターミナルから切り離します(TIOCNOTTY)。

/dev/tty0オペレーティングシステムの現在アクティブな(つまり、モニターに表示される)仮想コンソールです。この特別なファイルはシステムソフトウェアによって大幅に使用されることはほとんどありませんが、事実上「エイリアス」であり、syslogデーモン、および場合によってはカーネル自体によって多くの用途があります。/dev/consoletty0/dev/console

違いを確認するための実験:(+ + )またはターミナルエミュレーターでrootシェルを実行します。さてtty3CtrlAltF3

# sleep 2; echo test >/dev/tty

その後すぐにCtrl+ Alt+ F2、2秒待ってからCtrl+ Alt+何でも戻ってください。出力はどこに表示されますか?
そして今のための同じテスト/dev/tty0


あなたの答えは、私の質問にリンクした質問によって提供された答えと違いはありません。私が心配しているのは、カーネルがそれらを一緒に使用する方法のプロセスです。
Ron Vince、

@Ron Vince:更新されました。
Incnis Mrsi 2015

プロセスが特定の/ dev / tty [1、..、N]ではなく/ dev / ttyに書き込むことは必須ですか?
Ron Vince

@Ron Vince:繰り返しになりますが、SSHセッション(技術的にはの子sshd)内またはxtermウィンドウ内で実行されたプロセスは、固有の/ dev / tty nを持っていません 。疑似端末デバイスに接続されているため、システムコンソールのデバイスと相互作用しません。これは、/ dev / tty nがrootプロセスである場合、または同じユーザーがログオンしたtty nである場合に、  それを開くことを妨げるものではありません  。「特定のtty」に関するいくつかのポイントを回答に追加しようとしています。
Incnis Mrsi

端末エミュレータであるxtermを使用するとします。これはチェーンですか(xterm-> / dev / tty-> / dev / pty-> / dev / tty [1、..、N]->シェル)?/ dev / tty0については、はっきりしていると思います。プロセスとカーネルからの出力は、ttyデバイスドライバーが現在処理する/ dev / tty [1、..、N]に送信されます。これはチェーンです(カーネル/プロセス-> / dev / tty0->現在の/ dev / tty [1、..、N])
Ron Vince

2

/ dev / ttyは、任意のプロセスの制御ttyです。これはあなたの殻かもしれません。

プロセスに制御ttyがない場合、/ dev / ttyは使用できません。これは、たとえばデーモンに当てはまります。

プロセスに制御ttyがある場合、/ dev / ttyは、プロセスがstdin、stdout、またはstderrに使用している実際のttyドライバーのドライバーエイリアスです。

詳細についてはman -s7d tty、を参照してください。このマニュアルが記載されているセクションは、OSによって異なる可能性があるため、セクション1のマニュアルページと混同しないでくださいman -k tty。たとえば、を確認してください。


「プロセスが使用している実際のttyドライバーのエイリアス」。引用されたテキストはtty [1、..、N]を参照していますか?
Ron Vince、

ドライバーのエイリアスは、単なるエイリアスとは異なります。これは別のドライバーですが、プロセスが実際に接続されているものすべてに作業を割り当てます。
schily 2015

私が正しく理解している場合(tldp.org/HOWTO/Text-Terminal-HOWTO-7.html#ss7.3も参照)、/ dev / ttyは/ dev /への現在のプロセス(現在CPUによって処理されています)のインターフェイスですtty [1、..、N]。一方、/ dev / tty0は特定の/ dev / tty [1、..、N]に属さないデータを出力するため、現在のプロセスに属する/ dev / tty [1、..、N]に出力されます。それらが正しければ、いつ/ dev / tty0が実際に使用されるのでしょうか。
Ron Vince

自分の家を持っていない場合、その家への別のエントリの可能性はあなたに家を与えません。
schily

したがって、/ dev / tty0は、スーパーユーザーの現在のシェルセッション(/ dev / tty [1、..、N]に関連付けられている)にデータを出力します。
Ron Vince
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.