为什么 X 服务器进程不是守护进程?

Tim*_*Tim 0 x11 daemon

root 717  2.0  3.2 1038344 263604 tty7   Rsl+ /usr/lib/xorg/Xorg -core :0 -seat seat0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch
Run Code Online (Sandbox Code Playgroud)

X 服务器进程正在运行名为 的程序是否正确Xorg?(所以我可以放心,我已经找到了 X 服务器进程。)

它是一个服务器,为什么它还有一个控制终端(tty7)?为什么它不能放弃一个控制终端并成为一个守护进程?

谢谢。

Jde*_*eBP 5

X11 服务器不需要任何旧的终端设备。它特别需要一个内核虚拟终端设备。

这是因为它没有将终端用于一般终端 I/O。它使用终端作为在终端和内核内置的终端仿真程序之间协商共享 I/O 设备的一种方式。使用特定于内核虚拟终端设备的协议,该协议涉及ioctl()只有该类型的设备才能理解并向进程发送信号,它可以协商何时负责显示和人工输入设备(HID)以及内核何时内置终端模拟器程序是。

(在 Linux 上,这是 KVT 的主要用途,I/O 完全通过其他设备路由,它作为控制终端几乎但不完全是 X11 服务器打开 KVT 设备的副作用一个没有控制终端的会话。在 BSD 上,事情更复杂,因为 KVT 设备也是访问帧缓冲区和 HID 输入的一种方式,尽管如果它们是 USB,则不如访问底层 USB HID 好。然而,在 FreeBSD 上,至少一开始Xorg不会以 KVT 作为其控制终端,因为在 FreeBSD 上,简单地打开终端设备永远不会自动使其成为控制终端,而且这个问题没有实际意义,因为该Xorg过程实际上并没有 有一个正常操作的控制终端。)

如果内核的内置终端仿真器没有使用特定的显示设备或 HID,可以通过一些努力来安排(以远远超出本答案范围的方式),那么设备共享是不必要的,X11 服务器可以始终“拥有”设备。此外,如果内核是在没有内置终端仿真器的情况下构建的,则没有什么可协商的。类似地,如果 X11 服务器实际上一开始就没有使用任何 I/O 设备(如程序的情况Xvnc),则不需要协商 I/O 设备所有权的机制。

进一步阅读