Qual é o propósito do terminal de controle?

6

Digamos que eu abri algum programa do terminal e redirecionei seus stdin e stdout e stderr para três arquivos.

Embora este programa não envie mais sua saída para o terminal e não receba mais sua entrada do terminal, o programa ainda tem um "link" para o terminal. O terminal com o qual o programa tem esse "link" é chamado de controlando terminal , a imagem a seguir ilustra isso:

Minha pergunta é: qual é o propósito do terminal de controle, meu palpite é que o terminal de controle pode ser usado para enviar sinais para o programa (por exemplo: Ctrl+C ).

Existem outras finalidades para o terminal de controle?

    
por John 14.11.2017 / 19:12

1 resposta

2

Com o terminal de controle, o processo é capaz de dizer ao kernel qual grupo de processos é o grupo de processos de primeiro plano (na mesma sessão). Se houver um grupo de processos de primeiro plano para um terminal, poderemos controlar o grupo de processos de primeiro plano por meio do terminal, por exemplo, Ctrl-C / Ctrl- \ para finalizar o grupo de processos de primeiro plano. (Um terminal pode ter apenas um grupo de processos em primeiro plano, ou pode não ter nenhum. Para colocá-lo precisamente, um terminal só pode ser associado a uma sessão de processo.)

Com o terminal de controle, mesmo se você já redirecionar o stdin para outros locais / arquivos, você ainda poderá ler / gravar de / para o terminal de controle, o /dev/tty . Este arquivo especial é um sinônimo dentro do kernel para o terminal de controle do processo atual. Se o seu processo não tiver um terminal de controle associado, abra este arquivo. O que você pode fazer em relação a este arquivo? Por exemplo, alguns programas precisam que o usuário insira a senha antes de fazer algo, como programas para login ou criptografia. Esses programas podem proibir o usuário de inserir a senha do stdin, o que significa que mesmo que você redirecione o stdin para um arquivo aleatório, ele ainda aguardará pelo seu tipo. A razão é que todos eles abrem o / dev / tty para ler.

Para resumir, com o terminal de controle, o kernel está ciente de onde entregar o terminal gerado pelo terminal e a entrada do terminal se eles forem esperados por alguém. Isso é tudo.

Portanto, é desnecessário associar um processo a um terminal de controle, se ele não quiser ser controlado por nenhum terminal e não quiser ler / gravar de / para "/ dev / tty" (como a maioria dos programas daemon). No entanto, um processo comum lançado de dentro de um shell sempre tem um terminal de controle associado, porque ele é membro da sessão de shell, que já estabeleceu um terminal de controle quando o shell é inicializado. (Na verdade, um processo aleatório não pode anexar um terminal como terminal de controle, apenas o processo de líder de sessão pode.)

    
por 14.11.2017 / 21:12