Pipe
偽終端與一對管道
為什麼偽終端在類 Unix 系統上是一個單獨的功能?是什麼讓它們優於用於實現終端仿真器的一對管道或 FIFO?
終端與其他形式的 I/O 不同,終端仿真器需要將自己呈現為終端。
- 終端(包括偽終端)具有某些屬性,例如其行長和支持的控制序列。程序可以要求這些,例如,通常
ls
會確定其輸出是否將發送到終端,然後調整其顏色和列表以匹配終端。您可以對此進行測試:
ls | cat
不會給您單獨的列。偽終端用於為終端仿真器傳遞適當的值。再舉一個例子,出於安全原因,程序喜歡
sudo
並且ssh
將直接從終端讀取密碼,您不能將它們通過管道輸入。
- 終端用於控制程序。如果按下
^C
,終端將發送SIGINT
到它的前台程序。這是終端的工作。這意味著,為了使之類的東西^C
正常工作,必須有一個終端。同樣,掛斷終端(或現代系統,關閉終端仿真器的視窗)將發送
SIGHUP
到與其關聯的所有程序。偽終端處理這個,一對管道不能。
通常,除守護程序外的所有程序都有一個控制終端。您可以使用
ps
來告訴您哪些程序屬於哪些終端。