O "teclado" não envia nenhum sinal, a disciplina de linha envia. Descubra o que é uma disciplina de linha e leia man 1 stty.
Satō Katsura
@SatoKatsura A disciplina de linha é como um driver de teclado.
Gilles 'SO- stop be evil'
@ Gilles Na verdade não. O driver do teclado lida com scancodes e similares. A disciplina linha é uma espécie de maior cola nível que dá a aplicação de uma visão unificada sobre muitas outras coisas, como linhas de modem, adaptadores USB-to-serial, dispositivos HID, etc.
Satō Katsura
@SatoKatsura É uma parte do sistema operacional que fica entre o aplicativo e o teclado. Em outras palavras, faz parte do driver do teclado. Com um terminal de hardware (como um vt100), é a única transformação da entrada do teclado feita pelo computador em oposição ao próprio terminal.
Gilles 'SO- stop be evil'
Respostas:
27
A disciplina de linha N_TTY do Linux envia apenas três sinais diferentes: SIGINT, SIGQUIT e SIGTSTP. Por padrão, os seguintes caracteres de controle produzem os sinais:
Hmm, e Ctrl-S e Ctrl-Q? Você tem uma referência para isso?
Tom Hale
6
Nenhum sinal está envolvido quando você pressiona Ctrl-S ou Ctrl-Q. Eles apenas limitam o fluxo de caracteres, impedindo-os de alcançar o processo de consumo. Eventualmente, quando os buffers forem preenchidos, o processo de produção será bloqueado na chamada do sistema de gravação até que Ctrl-Q libere o fluxo. Observe que é normal que a chamada para gravação possa bloquear mesmo sem o Ctrl-S: se o processo de recebimento demorar para consumir os dados enviados, por exemplo, porque ele está gastando a maior parte do tempo processando dados já recebidos em vez de ler novos dados .
Johan Myréen
11
man stty | grep -C1 signalé uma fonte para esses três, sendo os únicos sinais gerados pelo terminal.
Tom Hale
@ TomHale ... Exceto "sinais de controle do modem" são sinais elétricos. :) Realmente, SIGINT, SIGQUITe SIGTSTPsão a única sinais "habituais" enviada pela disciplina line. No BSD você também tem coisas do tipo SIGINFO, mas isso não é padrão.
Satō Katsura
8
Você pode usar sttypara verificar ou alterar os caracteres que geram sinais.
intr(interromper) gera SIGINT, quitgera SIGQUIT, susp(suspende) gera SIGTSTP. stty -atambém mostrará coisas como start = ^Q; stop = ^S;e erase = ^?(backspace), que não enviam sinais, mas afetam a camada terminal.
Plain sttymostrará as configurações não padrão e, por exemplo stty intr ^Q, alteraria o caractere de interrupção para em ^Qvez de ^C.
Eu acho que ^L(feed de formulário, nova página) não é um recurso terminal, mas um caractere frequentemente usado pelos aplicativos para solicitar um redesenho da exibição, verificando novamente o tamanho da janela ao mesmo tempo.
^Ltem um significado diferente para diferentes aplicações. Na maioria dos cursesaplicativos baseados em (tais como vim, less, mutt, mc, etc.) que obriga um redesenho completo (portanto, re-verificar o tamanho da janela), mas em conchas ( bashetc.) ele só limpa a tela. Não há SIGWINCHenvolvido.
man 1 stty
.Respostas:
A disciplina de linha N_TTY do Linux envia apenas três sinais diferentes: SIGINT, SIGQUIT e SIGTSTP. Por padrão, os seguintes caracteres de controle produzem os sinais:
fonte
man stty | grep -C1 signal
é uma fonte para esses três, sendo os únicos sinais gerados pelo terminal.SIGINT
,SIGQUIT
eSIGTSTP
são a única sinais "habituais" enviada pela disciplina line. No BSD você também tem coisas do tipoSIGINFO
, mas isso não é padrão.Você pode usar
stty
para verificar ou alterar os caracteres que geram sinais.intr
(interromper) geraSIGINT
,quit
geraSIGQUIT
,susp
(suspende) geraSIGTSTP
.stty -a
também mostrará coisas comostart = ^Q; stop = ^S;
eerase = ^?
(backspace), que não enviam sinais, mas afetam a camada terminal.Plain
stty
mostrará as configurações não padrão e, por exemplostty intr ^Q
, alteraria o caractere de interrupção para em^Q
vez de^C
.Eu acho que
^L
(feed de formulário, nova página) não é um recurso terminal, mas um caractere frequentemente usado pelos aplicativos para solicitar um redesenho da exibição, verificando novamente o tamanho da janela ao mesmo tempo.fonte
^L
tem um significado diferente para diferentes aplicações. Na maioria doscurses
aplicativos baseados em (tais comovim
,less
,mutt
,mc
, etc.) que obriga um redesenho completo (portanto, re-verificar o tamanho da janela), mas em conchas (bash
etc.) ele só limpa a tela. Não háSIGWINCH
envolvido.