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,
ls
determinará 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 | cat
não fornecerá colunas separadas. Um pseudoterminal é usado para passar os valores apropriados para o emulador de terminal.Como outro exemplo, programas como
sudo
essh
irã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áSIGINT
para seu processo em primeiro plano . Este é o trabalho do terminal. Isso significa que, para que coisas como^C
funcionem, deve haver um terminal.Da mesma forma, desligar em um terminal (ou em um sistema moderno, fechando a janela do emulador de terminal) enviará
SIGHUP
para 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
ps
para informar quais processos pertencem a quais terminais.