关闭终端仿真器窗口时,从属端或主控端的最后一个文件描述符是否已关闭?

关闭终端仿真器窗口时,从属端或主控端的最后一个文件描述符是否已关闭?

Linux 编程接口表示SIGHUP发送到终端的控制进程

当工作站上的终端窗口关闭时。发生这种情况是因为与终端窗口关联的伪终端的主端的最后一个打开的文件描述符已关闭。

我的理解是,一个终端窗口是为从端创建的,一个主端可以有多个从端。因此,当终端窗口关闭时,它仅意味着最后打开的文件描述符奴隶与终端窗口关联的伪终端的一侧已关闭。为什么引用说“主”方?

谢谢。

答案1

我的理解是,一个终端窗口是为从端创建的,一个主端可以有多个从端。

伪终端始终只有一个主端和一个从端。它只是一个带有一些额外操作的双向管道 [1]。

可以打开多个窗口/选项卡的终端仿真器也可以处理多个伪 tty master。

正如我已经在另一篇文章中解释过的回答,当用户尝试关闭窗口或其选项卡之一时,终端模拟器可以执行自己的操作;例如,xterm不会关闭 pty 的主端,而只会SIGHUP向 tty 的进程组发送 a,并且仅在 in 中启动的进程已退出或无法使用自身时销毁窗口(并退出) pty 的主部分不再存在(例如,因为其从端的所有句柄都已关闭)。

[1]。在 SystemV 系统上流媒体,这些额外的操作是模块化的,必须用 .“推送” ioctl(I_PUSH)。在 Linux 和 *BSD 上,它们是硬连线的。另外,ptys 的行为也没有完全标准化;在 Linux 上尝试从没有主设备的从设备读取数据会失败,反之亦然,EIO但在 FreeBSD 上会返回 0 (EOF)。

相关内容