/dev/console 指向 tty0?

/dev/console 指向 tty0?

我一直在尝试了解 /dev/console 设备,但有一些事情我不清楚:

  1. 该设备的用途是什么?据我所知,它只是内核显示消息的地方,对吗?

  2. 指定为控制台的虚拟终端不允许具有作业控制权。为什么?这仅仅是因为内核试图阻止您在需要打印系统消息的地方运行其他任何内容吗?

  3. 对我来说,/dev/console 似乎指向 tty0,当前的虚拟控制台。我发现这是基于一些简单的测试这似乎是一个相当常见的配置。然而,对我来说,这表明 tty0 应该禁用作业控制,这意味着所有控制台都应该禁用作业控制,这会很糟糕。光是想想就让人头疼。另外,如果 tty0 是控制台,那么我不应该在当前终端上而不是仅在 tty1 上获取内核消息吗?

答案1

这很大程度上是历史遗留下来的,当时操作控制台是一个实际的电传打字机,在一张纸(一种由木纤维制成的薄柔性材料,通常是白色)上打印(留下不可磨灭的标记)。随着时间的推移,这些信息很大程度上被定向到 syslog 和 dmesg 设施,因为现在很少有系统拥有实际的控制台,但仍然需要这些信息。

我不知道你从哪里得到 /dev/console 是 tty0 的想法;在我的 Linux 3 机器上,/dev/console、tty 和 ttyprintk 的设备主设备号均为 5,而 tty0 和所有其余伪 tty 的主设​​备号为 4。这意味着它们使用不同的驱动程序(或者根本不同)同一驱动程序的模式)。

答案2

这本书很好地介绍了 Linux tty,并且fgreping for register_consolein Linux kerneldrivers/char/*.c展示了 Linux 控制台的情况。有许多实施Linux 内核中可用的系统控制台。特定的 Linux 安装可以决定哪个特定设备应充当控制台。它可以通过在启动时传递内核参数来指定,或者可能存在其他技术。这实现是默认的,并且可以说事实上的标准,但也存在其他标准,例如

/dev/console有自己专用的专业:辅修。为什么?因为内核本身当报告紧急消息时,是内核设备的主要用户。有struct tty_driver *console_driver内核对象指向所需的例程。那么为什么不为用户态程序提供一个接口呢?不知道/dev/console对于默认设置来说 是否真的等同于/dev/tty0,或者存在一些差异。

现在关于 的工作控制tty0。如果tty0不真正模拟终端而仅指向一个tty终端,那怎么可能目前活跃? Linux 内核阻止进程附加到、间歇性与、...等tty0发生冲突的“设备” 。由于无法控制进程,因此不可能进行作业控制(顺便问一下,出于什么合法目的可以为shell 提供数据?)。但这与控制运行的作业的可能性无关tty1tty7tty0tty0具体的虚拟控制台。tty事实上,其他编号的终端是用于控制台应用程序任何目的的合法终端。

答案3

/dev/console 是本地终端会话的抽象 - 与插入机器的监视器关联的控制台。

它的目的主要是在服务器上,即使系统在单用户模式下运行,也可以提供远程访问。当 eth0 网络关闭时,此类控制台(在大多数情况下)绑定到 eth0 设备。

相关内容