É o terminal ou o shell que é responsável por ações de pressionamentos de tecla? [duplicado]

0

Eu não sei exatamente se o terminal é o manipulador de pressionamentos de tecla como CTRL + C ou CTRL + D e muitos outros ou o shell.

Quando pressiono um toque de tecla, penso desta forma, como a imagem descreve:

Quando um pressionamento de tecla é pressionado, o pressionamento de teclas é feito pelo shell, o shell interpreta os pressionamentos de tecla e faz o que for necessário, talvez enviando um sinal quando CTRL + C é pressionado ou limpando a tela com CTRL + L em. Portanto, a casca desempenha o papel do intermediário para as entradas do programa. As entradas vão do shell para o stdin do programa.

O stdout do programa vai para o shell, e o shell redireciona a saída para um terminal, arquivos ou pipes.

O terminal envia ao shell os bytes das teclas pressionadas.

Estou certo?

    
por direprobs 19.06.2017 / 13:27

1 resposta

3

Não realmente. Sinais etc são manipulados pelo driver de terminal, então o shell realmente não sabe se você digitou um literal ctrl-C ou enviou o mesmo sinal com kill de outra janela, por exemplo.

Keystrokes -> Terminal -> Terminal driver -> Foreground process

Quando o shell não é o processo de primeiro plano (como quando você o usou para iniciar um programa interativo, ou realmente qualquer processo de primeiro plano), esse programa recebe entrada de teclado e quaisquer sinais do driver de terminal.

A entrada padrão vem do terminal por padrão, mas você pode executar um shell com sua entrada redirecionada de um arquivo ou de um fluxo de rede, por exemplo, e o shell realmente não sabe a diferença. Da mesma forma, o shell pode redirecionar fluxos padrão de entrada, saída e erro para seus processos filhos independentemente de um terminal estar envolvido.

    
por 19.06.2017 / 13:49