Linux如何使用/ dev / tty和/ dev / tty0


8

通过测试此问题提供的方法,可以看到/ dev / tty和/ dev / tty0之间的区别。但是我真的很想知道这些设备的实际用法(例如将要使用的情况)。


@ 0xC0000022L不知何故,我无法将tty与sda关联,因为与sda不同,tty具有3个不同的类别(tty,tty0,tty [1,..,N])。
罗恩·文斯

我认为@ 0xC0000022L提供的类比颇具误导性。二者/dev/sda/dev/sda1指定特定块设备(一个恰好是另一个的一部分)。/dev/tty另一方面,是没有特定其他tty的虚拟设备。
Celada

Answers:


16

/dev/tty是实际打开此特殊文件的任何进程的当前进程的控制tty 。它不一定是虚拟控制台设备(/dev/ttyn),并且可以是(例如串行端口等)。如果控制tty不是虚拟控制台,则该进程不必与控制台设备进行交互,即使其伪tty实际上是在系统控制台上实现的也是如此。例如 对于本地运行的X服务器下的终端仿真器中的外壳,这些程序形成了如下的交互链:

   Unix
     shell⇕ /dev/pts/2/dev/tty用于进程))
 内核pty驱动程序
     ⇕ /dev/ptmx
 终端仿真器
     ⇕X Window协议
   X服务器
     ⇕ /dev/tty7/dev/tty用于服务器的≡ )
 系统控制台
zxc↿⇂[_̈░░]
    用户

使用/dev/tty由用户态程序包括:

  • 写一些东西到控制终端,忽略所有重定向和管道;
  • 制作一个ioctl()–参见tty_ioctl(4);
  • 例如,从终端上卸下(TIOCNOTTY)。

/dev/tty0是当前活动的(即,在显示器上可见的)虚拟控制台的的操作系统。这个特殊文件不太可能被系统软件大量使用,但/dev/console实际上是tty0/dev/console syslog守护程序(有时甚至是内核本身)的“别名”,并已被大量使用。

实验以显示差异:roottty3Ctrl+ Alt+ F3)或终端仿真器上运行shell 。现在

# sleep 2; echo test >/dev/tty

然后快速Ctrl+ Alt+ F2,等待两秒钟,然后Ctrl+ Alt+随便返回。您在哪里看到输出?
现在对进行相同的测试/dev/tty0


您的答案与我在问题中链接的问题所提供的答案没有区别。我关心的是内核如何一起使用它们的过程。
罗恩·文斯

@Ron Vince:已更新。
Incnis Mrsi 2015年

是否必须将进程写入/ dev / tty而不是其特定的/ dev / tty [1,..,N]?
罗恩·文斯

@Ron Vince:再次说明,在SSH会话(技术上是的子节点sshd)或xterm窗口中执行的进程没有其特定的/ dev / tty  n。它不与系统控制台的设备交互,因为它已连接到伪终端设备。这不是阻止它打开/ dev / tty  n(如果它是根进程),或者是同一用户登录tty  n。即将在答案中添加有关“特定tty”的一些观点。
Incnis Mrsi 2015年

假设我使用xterm这是一个终端仿真器。这是链(xterm-> / dev / tty-> / dev / pty-> / dev / tty [1,..,N]-> shell)吗?对于/ dev / tty0,我认为我很清楚。任何进程和内核的输出都将发送到tty设备驱动程序现在处理的/ dev / tty [1,..,N]。这是链(内核/进程-> / dev / tty0->当前/ dev / tty [1,..,N])
Ron Vince

2

/ dev / tty是任何进程的控制tty。这可能是您的外壳。

如果您的进程没有控制tty,则/ dev / tty不可用,例如,对于守护程序,则为true。

如果您的进程具有控制tty,则/ dev / tty是您的进程用于stdin,stdout或stderr的真实tty驱动程序的驱动程序别名。

请参阅man -s7d tty以获取更多信息。请注意,本手册所在的部分可能在不同的操作系统之间有所不同,并且不应与第1部分的手册页混淆。因此,请检查例如man -k tty


“别名为您的进程正在使用的真实tty驱动程序”。引用的文本是否指向tty [1,..,N]?
罗恩·文斯

驱动程序别名与别名不同。它是一个不同的驱动程序,但是它将工作定向到您的过程真正连接的任何地方。
schily

如果我理解正确(另请参阅tldp.org/HOWTO/Text-Terminal-HOWTO-7.html#ss7.3),/ dev / tty是当前进程(当前由CPU处理)到/ dev /的接口。 tty [1,..,N]。同时,/ dev / tty0将输出不属于特定的/ dev / tty [1,..,N]的数据,因此输出到属于当前进程的/ dev / tty [1,..,N] 。如果这些是正确的,我想知道何时会真正使用/ dev / tty0。
罗恩·文斯

如果您没有自己的房子,那么进入该房子的可能替代选择将不会给您房子。
schily

因此,/ dev / tty0将数据输出到超级用户当前的shell会话(与/ dev / tty [1,..,N]关联)。
罗恩·文斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.