我目前的控制終端和/dev/tty
之間有什麼關係?
在 Lubuntu 18.04 上,我在 lxterminal 中執行一個 shell。它的控制終端是目前的偽終端從機:
$ tty /dev/pts/2
我想知道我目前的控制終端
/dev/pts/2
和/dev/tty
.
/dev/tty
就像我目前的控制終端一樣/dev/pts/2
:$ echo hello > /dev/tty hello $ cat < /dev/tty world world ^C
- 但它們似乎是不相關的文件,而不是一個符號連結或硬連結到另一個:
$ ls -lai /dev/tty /dev/pts/2 5 crw--w---- 1 t tty 136, 2 May 31 16:38 /dev/pts/2 13 crw-rw-rw- 1 root tty 5, 0 May 31 16:36 /dev/tty
對於具有不同控制終端的不同會話,
/dev/tty
保證if是它們的控制終端。它怎麼可能是不同的控制終端,而不是符號連結或硬連結?那麼它們的關係和區別是什麼?任何幫助深表感謝!
這篇文章出自較早的一篇
tty
命令的輸出和/dev/tty
文件是否都指向目前bash 程序的控制終端?
第 4 節中的
tty
聯機幫助頁聲明如下:文件*/dev/tty*是一個主編號為 5 次編號為 0 的字元文件,通常是模式 0666 和 owner.group root.tty。它是程序控制終端(如果有)的同義詞。
除了
ioctl(2)
tty 所指的設備支持的ioctl(2)
請求外,TIOCNOTTY
還支持請求。
TIOCNOTTY
將呼叫程序與其控制終端分離。
如果程序是會話領導者,則
SIGHUP
和SIGCONT
信號被發送到前台程序組,並且目前會話中的所有程序都失去了它們的控制 tty。此呼叫僅適用於連接到*/dev/tty*
ioctl(2)
的文件描述符 。當使用者在終端呼叫它時,守護程序會使用它。該程序嘗試打開*/dev/tty*。如果打開成功,它使用 將自己與終端分離 ,而如果打開失敗,它顯然沒有附加到終端,不需要自行分離。TIOCNOTTY
這可以部分解釋為什麼
/dev/tty
不是控制終端的符號連結:它將支持附加的ioctl
,並且可能沒有控制終端(但程序總是可以嘗試訪問/dev/tty
)。但是文件是不正確的:附加資訊ioctl
不僅可以通過/dev/tty
(請參閱mosvy 的答案,這也對 的性質給出了更明智的解釋/dev/tty
)。
/dev/tty
可以表示不同的控制終端,而不是連結,因為實現它的驅動程序決定呼叫程序的控制終端是什麼,如果有的話。您可以將其視為
/dev/tty
控制終端,從而提供僅對控制終端有意義的功能,而/dev/pts/2
等是普通終端,其中一個可能恰好是給定程序的控制終端。