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

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

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

答案1

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

   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 守护进程大量使用,有时也被内核本身使用。

进行实验以显示差异:roottty3( Ctrl+ Alt+ F3) 或终端模拟器中运行 shell。现在

# sleep 2; echo test >/dev/tty

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

答案2

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

如果您的进程没有控制 tty,则 /dev/tty 不可用,这对于守护程序来说是正确的。

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

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

相关内容