Linux 编程接口说SIGHUP
被发送到终端的控制进程
当工作站上的终端窗口关闭时。这是因为与终端窗口关联的伪终端的主端的最后一个打开文件描述符已关闭。
我的理解是终端窗口是为从端创建的,主端可以有多个从端。因此,当终端窗口关闭时,仅意味着与终端窗口关联的伪终端的从端的最后打开文件描述符已关闭。为什么引用说“大师”的一面?
谢谢。
Linux 编程接口说SIGHUP
被发送到终端的控制进程
当工作站上的终端窗口关闭时。这是因为与终端窗口关联的伪终端的主端的最后一个打开文件描述符已关闭。
我的理解是终端窗口是为从端创建的,主端可以有多个从端。因此,当终端窗口关闭时,仅意味着与终端窗口关联的伪终端的从端的最后打开文件描述符已关闭。为什么引用说“大师”的一面?
谢谢。
一个伪终端总是只有一个主端和一个从端。它只是一个带有一些额外操作的双向管道 [1]。
可以打开多个窗口/选项卡的终端仿真器也将处理多个伪 tty 主机。
正如我在另一个答案中已经解释的那样,当用户尝试关闭窗口或其一个选项卡时,终端仿真器可以做自己的事情;例如,
xterm
不会关闭 pty 的 master 端,而只会向SIGHUP
tty 的进程组发送 a ,并且仅在 in 启动的进程退出或无法使用自身时销毁窗口(并退出)不再是 pty 的主控部分(例如,因为它的从属端的所有句柄都已关闭)。[1]。在带有STREAMS的 SystemV 系统上,这些额外的操作是模块化的,必须使用
ioctl(I_PUSH)
. 在 Linux 和 *BSD 上,它们是硬连线的。另外,ptys 的行为也不是完全标准化的;尝试从没有主设备的从设备读取数据,反之亦然,EIO
在 Linux 上会失败,但在 FreeBSD 上会返回 0 (EOF)。