Answers:
/dev/tty
是实际打开此特殊文件的任何进程的当前进程的控制tty 。它不一定是虚拟控制台设备(/dev/tty
n),并且可以是ty(例如串行端口等)。如果控制tty不是虚拟控制台,则该进程不必与控制台设备进行交互,即使其伪tty实际上是在系统控制台上实现的也是如此。例如 对于本地运行的X服务器下的终端仿真器中的外壳,这些程序形成了如下的交互链:
Unix
shell⇕ /dev/pts/2
(/dev/tty
用于进程))
内核pty驱动程序
⇕ /dev/ptmx
终端仿真器
⇕X Window协议
X服务器
⇕ /dev/tty7
(/dev/tty
用于服务器的≡ )
系统控制台
zxc↿⇂[_̈░░]
用户
使用/dev/tty
由用户态程序包括:
/dev/tty0
是当前活动的(即,在显示器上可见的)虚拟控制台的的操作系统。这个特殊文件不太可能被系统软件大量使用,但/dev/console
实际上是tty0
/dev/console
syslog守护程序(有时甚至是内核本身)的“别名”,并已被大量使用。
实验以显示差异:root
在tty3
(Ctrl+ Alt+ F3)或终端仿真器上运行shell 。现在
# sleep 2; echo test >/dev/tty
然后快速Ctrl+ Alt+ F2,等待两秒钟,然后Ctrl+ Alt+随便返回。您在哪里看到输出?
现在对进行相同的测试/dev/tty0
。
sshd
)或xterm
窗口中执行的进程没有其特定的/ dev / tty n。它不与系统控制台的设备交互,因为它已连接到伪终端设备。这不是阻止它打开/ dev / tty n(如果它是根进程),或者是同一用户登录tty n。即将在答案中添加有关“特定tty”的一些观点。
/ dev / tty是任何进程的控制tty。这可能是您的外壳。
如果您的进程没有控制tty,则/ dev / tty不可用,例如,对于守护程序,则为true。
如果您的进程具有控制tty,则/ dev / tty是您的进程用于stdin,stdout或stderr的真实tty驱动程序的驱动程序别名。
请参阅man -s7d tty
以获取更多信息。请注意,本手册所在的部分可能在不同的操作系统之间有所不同,并且不应与第1部分的手册页混淆。因此,请检查例如man -k tty
。