Pipe

偽終端與一對管道

  • July 12, 2016

為什麼偽終端在類 Unix 系統上是一個單獨的功能?是什麼讓它們優於用於實現終端仿真器的一對管道或 FIFO?

終端與其他形式的 I/O 不同,終端仿真器需要將自己呈現為終端。

  • 終端(包括偽終端)具有某些屬性,例如其行長和支持的控制序列。程序可以要求這些,例如,通常ls會確定其輸出是否將發送到終端,然後調整其顏色和列表以匹配終端。

您可以對此進行測試:ls | cat不會給您單獨的列。偽終端用於為終端仿真器傳遞適當的值。

再舉一個例子,出於安全原因,程序喜歡sudo並且ssh將直接從終端讀取密碼,您不能將它們通過管道輸入。

  • 終端用於控制程序。如果按下^C,終端將發送SIGINT它的前台程序。這是終端的工作。這意味著,為了使之類的東西^C正常工作,必須有一個終端。

同樣,掛斷終端(或現代系統,關閉終端仿真器的視窗)將發送SIGHUP到與其關聯的所有程序。

偽終端處理這個,一對管道不能。

通常,除守護程序外的所有程序都有一個控制終端。您可以使用ps來告訴您哪些程序屬於哪些終端。

引用自:https://unix.stackexchange.com/questions/295351