Terminal-Emulator
關閉終端仿真器視窗時,從屬端或主端的最後一個文件描述符是否關閉?
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)。