Os terminais são diferentes de outras formas de E / S, e um emulador de terminal precisa se apresentar como um terminal.
-
Um terminal (incluindo um pseudo-terminal) possui certos atributos, como o comprimento da linha e sequências de controle suportadas. Programas podem pedir por isso, por exemplo, em geral,
lsdeterminará se sua saída está indo para um terminal e, em seguida, ajustará suas cores e tabulação para corresponder ao terminal.Você pode testar isso:
ls | catnão fornecerá colunas separadas. Um pseudoterminal é usado para passar os valores apropriados para o emulador de terminal.Como outro exemplo, programas como
sudoesshirão, por razões de segurança, ler a senha diretamente do terminal, você não pode canalizá-los. -
Os terminais são usados para controlar processos. Se você pressionar
^C, o terminal enviaráSIGINTpara seu processo em primeiro plano . Este é o trabalho do terminal. Isso significa que, para que coisas como^Cfuncionem, deve haver um terminal.Da mesma forma, desligar em um terminal (ou em um sistema moderno, fechando a janela do emulador de terminal) enviará
SIGHUPpara todos os processos associados a ele.O pseudoterminal lida com isso, um par de canos não pode.
Em geral, todos os processos, exceto os daemons, possuem um terminal de controle. Você pode usar
pspara informar quais processos pertencem a quais terminais.