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
X 服务器进程正在运行名为 的程序是否正确Xorg
? (所以我可以确信我已经找到了X服务器进程。)
它是一个服务器,为什么它还有一个控制终端(tty7)?为什么它不能放弃控制终端而成为守护进程呢?
谢谢。
答案1
X11服务器不需要任何旧的终端设备。它具体来说需要一个内核虚拟终端设备。
这是因为它没有使用通用终端 I/O 终端。它使用终端作为它与内置于内核中的终端仿真器程序之间协商共享 I/O 设备的方式。使用特定于内核虚拟终端设备的协议,该协议涉及ioctl()
只有该类型的设备可以理解并向进程发送信号,它可以协商何时负责显示和人类输入设备(HID)以及何时内核内置终端仿真程序是。
(在 Linux 上,这是 KVT 的主要用途,I/O 完全通过其他设备路由,并且它作为控制终端几乎但不完全是 X11 服务器在没有控制终端的会话 在 BSD 上,事情更加复杂,因为 KVT 设备是这样的。还一种访问帧缓冲区和 HID 输入的方法,尽管不如访问底层 USB HID(如果它们是 USB)好。然而,在 FreeBSD 上至少首先Xorg
不会以 KVT 作为其控制终端,因为在 FreeBSD 上只需打开一个终端设备绝不自动使其成为控制终端,这个问题没有实际意义,因为该Xorg
过程实际上才不是有正常运行的控制终端。)
如果内核的内置终端仿真器没有使用特定的显示设备或 HID,可以通过一些努力来安排(以远远超出本答案范围的方式),那么设备共享是不必要的,X11 服务器可以始终“拥有”设备。另外,如果内核已经构建好了没有内置的终端仿真器,没有什么可协商的。类似地,如果 X11 服务器实际上并不首先使用任何 I/O 设备(就像程序的情况一样Xvnc
),则不需要协商 I/O 设备所有权的机制。