Lista de señales generadas por el terminal (por ejemplo, Ctrl-C -> SIGINT)


31

¿Dónde puedo encontrar una lista completa de las combinaciones de teclado que envían señales en Linux?

P.ej:

  • Ctrl+ C- SIGINT
  • Ctrl+ \- SIGQUIT

2
El "teclado" no envía ninguna señal, la disciplina de línea sí. Descubra qué es una disciplina de línea y luego lea man 1 stty.
Satō Katsura

@SatoKatsura La disciplina de línea es una especie de controlador de teclado.
Gilles 'SO- deja de ser malvado'

@Gilles No realmente. El controlador del teclado se ocupa de códigos de escaneo y similares. La disciplina de línea es una especie de pegamento alto nivel que da la aplicación de una visión unificada sobre muchas otras cosas, como líneas de módem, adaptadores de USB a serie, dispositivos HID, etc.
Sato Katsura

@SatoKatsura Es una parte del sistema operativo que se encuentra entre la aplicación y el teclado. En otras palabras, es parte del controlador del teclado. Con un terminal de hardware (como un vt100), es la única transformación de entrada de teclado que realiza la computadora en lugar del terminal en sí.
Gilles 'SO- deja de ser malvado'

Respuestas:


27

La disciplina de línea N_TTY de Linux solo envía tres señales diferentes: SIGINT, SIGQUIT y SIGTSTP. Por defecto, los siguientes caracteres de control producen las señales:

  • Ctrl+ C- SIGINT
  • Ctrl+ \- SIGQUIT
  • Ctrl+ Z- SIGTSTP

Hmm, ¿qué pasa con Ctrl-S y Ctrl-Q? ¿Tiene una referencia para esto?
Tom Hale

66
No hay señales involucradas cuando presiona Ctrl-S o Ctrl-Q. Simplemente aceleran el flujo de personajes, evitando que lleguen al proceso de consumo. Eventualmente, cuando se llenan las memorias intermedias, el proceso de producción bloqueará la llamada al sistema de escritura hasta que Ctrl-Q desacelere el flujo. Tenga en cuenta que es normal que la llamada a escribir pueda bloquearse incluso sin Ctrl-S: si el proceso de recepción es lento para consumir los datos que se le envían, por ejemplo, porque pasa la mayor parte de su tiempo procesando datos ya recibidos en lugar de leer datos nuevos .
Johan Myréen

1
man stty | grep -C1 signales una fuente para estos tres siendo las únicas señales generadas por el terminal.
Tom Hale

@TomHale ... Excepto que las "señales de control de módem" son señales eléctricas. :) Realmente, SIGINT, SIGQUITy SIGTSTPson las únicas señales "habituales" enviada por la disciplina de línea. En BSD también tienes cosas como SIGINFO, pero eso no es estándar.
Satō Katsura

8

Puede usar sttypara verificar o cambiar los caracteres que generan señales.

$ stty -a | grep -Ewoe '(intr|quit|susp) = [^;]+'
intr = ^C
quit = ^\
susp = ^Z

intr(interrumpir) genera SIGINT, quitgenera SIGQUIT, susp(suspende) genera SIGTSTP. stty -atambién mostrará cosas como start = ^Q; stop = ^S;y erase = ^?(retroceso), que no envían señales pero afectan a la capa terminal de lo contrario.

Plain sttymostrará la configuración no predeterminada y, por ejemplo stty intr ^Q, cambiaría el carácter de interrupción a en ^Qlugar de ^C.

Creo que ^L(formulario de alimentación, página nueva) no es una función de terminal, sino un carácter que las aplicaciones suelen utilizar para pedir que se vuelva a dibujar la vista, al volver a comprobar el tamaño de la ventana al mismo tiempo.


1
^Ltiene un significado diferente para diferentes aplicaciones. En la mayoría de cursesaplicaciones basadas en (tales como vim, less, mutt, mc, etc.) que obliga a un redibujado completa (por lo tanto volver a comprobar el tamaño de la ventana), pero en conchas ( bashetc.) que sólo se borra la pantalla. No hay SIGWINCHinvolucrado.
Satō Katsura
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.